2017-04-21 4 views
0

Swift 3에서 일하고 있습니다. 지금까지 JSON을 실제로 사용하지 않았습니다. 난 단지 query 때까지 데이터를 구문 분석 할 수있는이 문제에 직면하고있다. 그 후 데이터가 파싱되지 않습니다. 내가 여기서 뭘 잘못하고 있는지 알게 도와주세요.Alamofire를 사용하여 Swift 3에서 JSON을 구문 분석하는 방법은 무엇입니까?

JSON 코드 :

{ 
    "batchcomplete": "", 
    "continue": { 
    "gpsoffset": 10, 
    "continue": "gpsoffset||" 
    }, 
    "query": { 
    "pages": { 
     "445066": { 
     "pageid": 445066, 
     "ns": 0, 
     "title": "RoboCop", 
     "index": 3, 
     "thumbnail": { 
      "source": "https://upload.wikimedia.org/wikipedia/en/thumb/1/16/RoboCop_%281987%29_theatrical_poster.jpg/32px-RoboCop_%281987%29_theatrical_poster.jpg", 
      "width": 32, 
      "height": 50 
     } 
     }, 
     "25781": { 
     "pageid": 25781, 
     "ns": 0, 
     "title": "Robot", 
     "index": 1, 
     "thumbnail": { 
      "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/HONDA_ASIMO.jpg/37px-HONDA_ASIMO.jpg", 
      "width": 37, 
      "height": 50 
     } 
     }, 
     "2629669": { 
     "pageid": 2629669, 
     "ns": 0, 
     "title": "Robot-assisted surgery", 
     "index": 8, 
     "thumbnail": { 
      "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/Laproscopic_Surgery_Robot.jpg/34px-Laproscopic_Surgery_Robot.jpg", 
      "width": 34, 
      "height": 50 
     } 
     }, 
     "1527386": { 
     "pageid": 1527386, 
     "ns": 0, 
     "title": "Robot Chicken", 
     "index": 9 
     }, 
     "364093": { 
     "pageid": 364093, 
     "ns": 0, 
     "title": "Robot Wars (TV series)", 
     "index": 2 
     }, 
     "3977472": { 
     "pageid": 3977472, 
     "ns": 0, 
     "title": "Robot competition", 
     "index": 10 
     }, 
     "26333": { 
     "pageid": 26333, 
     "ns": 0, 
     "title": "Robotech", 
     "index": 5, 
     "thumbnail": { 
      "source": "https://upload.wikimedia.org/wikipedia/en/thumb/9/99/RobotechTitle1985.jpg/50px-RobotechTitle1985.jpg", 
      "width": 50, 
      "height": 38 
     } 
     }, 
     "20903754": { 
     "pageid": 20903754, 
     "ns": 0, 
     "title": "Robotics", 
     "index": 4, 
     "thumbnail": { 
      "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Shadow_Hand_Bulb_large.jpg/33px-Shadow_Hand_Bulb_large.jpg", 
      "width": 33, 
      "height": 50 
     } 
     }, 
     "893808": { 
     "pageid": 893808, 
     "ns": 0, 
     "title": "Robots (2005 film)", 
     "index": 7 
     }, 
     "101673": { 
     "pageid": 101673, 
     "ns": 0, 
     "title": "Robots exclusion standard", 
     "index": 6 
     } 
    } 
    } 
} 

스위프트 코드 :

var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options:.mutableContainers) as? JSONStandard 
     print(readableJSON) 
      if let query = readableJSON?["query"] as? JSONStandard{ 

       print(query," Here!! ") 

       if let pages = readableJSON?["pages"] as? [JSONStandard]{ 

        print(pages," Check this! ") 


        for i in 0..<pages.count{ 

         let page = pages[i] 

         let id = page ["id"] as! String 

         //titles.append(id) 

         self.tableView.reloadData() 

        } 
       } 
      } 

그리고 당신은 pages 각각의 새로운 블록이 어떤 식별자없이 선언 된 블록에서 보는, 그래서 어떻게 전화처럼 그 특별한 블록?

+0

신속한 기본 방법을 사용하고 alarmofire를 사용하지 않고 json pasing을 수행 할 수 있습니다. –

+0

@Balvansh Heerekar 코드에 어떤 문제가 있습니까? 오류가 무엇입니까? 그것은 당신이 "쿼리"내에 "페이지"가있는 것처럼 보입니다 당신이 잘못 구문 분석하고 있습니다. –

+0

모든 키 페이지를 가져올 수 있으며 키 값 쌍인 –

답변

2

키의 값 pages은 사전이 아니며 배열이 아니며 query에서 파생됩니다.

JSON을 읽으십시오 : [] 배열은 {}입니다.

그리고 id 키가없고 pageid이고 값은 Int (큰 따옴표 제외)입니다.

  if let pages = query["pages"] as? JSONStandard { 
       print(pages," Check this! ") 
       for (_, page) in pages { 
        let id = page ["pageid"] as! Int 
        print(id) 
        titles.append("\(id)") 
       } 
       self.tableView.reloadData() // don't reload the table view in the loop. 
      } 

또는 - 쉽게 - (String로 실제로 여기)도 id 수있는 사전의 키를 가지고

  if let pages = query["pages"] as? JSONStandard { 
       print(pages," Check this! ") 
       for (id, page) in pages { 
        print(id) 
        titles.append(id) 
       } 
       self.tableView.reloadData() 
      } 

은 사전이 항상 정렬되지 않은 것을 알고 있어야합니다.

+0

그냥 let question = "[pages"]라고 쓰면 어떨까요? JSON 표준 –

+0

@ TusharSharma 물론, 고마워요. – vadian

+0

언제나 환영합니다. –

관련 문제