2016-10-11 2 views
1

JSON 구문 분석에 문제가 있습니다. 위키 API에서 문제가 발생합니다.AlamoFire 4.0 + SwiftyJSON 깊게 중첩 된 JSON 전개 해제

Podfile :

platform :ios, ’10.0’ 
 

 
inhibit_all_warnings! 
 
use_frameworks! 
 

 
target 'GemFinder' do 
 

 
    pod 'Alamofire', '~> 4.0’ 
 
    pod 'SwiftyJSON', :git => 'https://github.com/appsailor/SwiftyJSON.git', :branch => 'swift3' 
 

 
end

스위프트 코드 :

import UIKit 
 
import Alamofire 
 
import SwiftyJSON 
 

 
class WikiAPI: NSObject { 
 
    
 
    func MineralRequest(minID: (String)) { 
 
     
 
     Alamofire.request("https://en.wikipedia.org/w/api.php?action=query&titles=\(minID)&exintro=1&prop=pageimages%7Cextracts&format=json&pithumbsize=300", parameters: ["query": "pages"]).responseJSON { response in 
 
      
 
      if let values = response.result.value as? [String: AnyObject] { 
 
       
 
       let json = JSON(values) 
 
       
 
       // Returns null 
 
       print("otherJSON: \(json["query"]["pages"][0]["extract"])") 
 
       
 
       
 
       let JSONvalues = values as NSDictionary 
 
       print("JSONvalues: \(JSONvalues)") 
 

 
       // This is also working to retrieve everything from below "query" 
 
       let parse = JSONvalues.object(forKey: "query") 
 
       print("Parse: \(parse)") 
 
       
 
       let queryValues = values["query"] 
 
       
 
       // Returns nested "pages" object, but I need to go deeper. 
 
       print("queryvalues: \(queryValues?["pages"])") 
 
       
 
      } 
 
     } 
 
    } 
 
}

나는 물론, 응답을 얻을 수 있어요

및하려고 더 깊게 가라. unwrap을 시도 할 때 null 값을 계속 가져옵니다.

무엇이 누락 되었습니까? 여기 나무의 이미지가 있습니다. 제목, 이미지 및 추출물을 꺼내려고합니다. 이 형식에 따라

JSON response preview

, 여기에서 볼 수 있듯이, 여전히 null 값을 산출한다. How do I access a nested JSON value using Alamofire and SwiftyJSON?

답변

1

"페이지"값이 그래서, 대신 키를 사용할 필요가 작동하지 않습니다 거기에 [0]를 사용하여 사전입니다 : 매개 변수 중 하나의 혜택을 보이지 않았다

print("otherJSON: \(json["query"]["pages"]["1895477"]["extract"])") 

을 또는이있는 경우 페이지의 많은 항목 및 원하는 항목을 모두 반복 할 수 있습니다.

let pages = json["query"]["pages"] 
for (_,page) in pages { 
    print(page["extract"]) 
} 
+0

고마워요! 이것이 정답이었습니다. – softdownfeathers

+0

첫 번째 부분은 작동하지만 더 많은 조사가 끝나면 pages.values가 오류를 발생시키는 것으로 나타났습니다. JSON에 멤버 "값"이 없다고 말합니다. JSON을 다른 것으로 변환하지 않고도이 작업을 수행 할 수있는 또 다른 방법이 있을까요? – softdownfeathers

+0

@softdownfeathers 환영합니다 :) SwiftyJSON에 대한 올바른 루프 구문으로 대답을 업데이트했습니다. –

관련 문제