2016-10-11 7 views
1

JSONの解析に問題があります。私はWiki 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の正しいループ構文で答えを更新しました。 –

関連する問題