2017-05-16 7 views
1

UIPickerViewクラス "行のタイトル"で使用できる情報の配列を返すために、以下のコードを取得しようとしています。 JSON値のすべての値のリストを返すprintスクリプトJSONの解析サンプルJSONのサンプルをご覧になり、今度は2度の夕方にYouTubeのビデオとこれに関する情報を読んでいます。テーブルビューにJSON結果。スウィフトJSON値をグローバル配列に解析する

 { 
    date = "2017-05-01"; 
    "financial_institution" = "Your Neighbourhood C.U."; 
    "five_year" = "2.79"; 
    "four_year" = "3.15"; 
    key = 86; 
    "one_year" = "2.79"; 
    "six_months" = 0; 
    "three_year" = "3.09"; 
    "two_year" = "2.89"; 
    "variable_rate" = 0; 
} 

 func getJSONData() 
    { 
     let url = URL(string:"") 
     let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in 

    if error != nil { 
     print("error") 
    } 

    else { 

     if let mydata = data { 

      do { 

       let myJson = try JSONSerialization.jsonObject(with: mydata, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 

       print(myJson) 

       var lenderName = myJson["financial_institution"] 

       for i in lenderName { 

        var lender = "financial_institution" 
        lender += "\(i)" 
        var lenderList = myJson[lender].string as String! 

        lenderNamesArray.append(lenderList) 
       } 


      } 

       catch { 
        // catch error 
       } 
      } 
     } 
    } 

task.resume() 

    } 
+0

をしかし、あなたの回答によると、json ** financial_institution **には配列オブジェクトが含まれていません。それはK-Vペアオブジェクトだけです。このオブジェクトを反復することはできません。 – Jaydeep

+0

実際のJSONを一部の代わりに表示 –

答えて

-1

私はあなたが分析しているJSONは、例えば、多くの貸し手が含まれていることを仮定している:

{ 
    "lenders": [ 
     { 
     "date": "2017-05-01", 
     "financial_institution": "Your Neighbourhood C.U.", 
     "five_year": "2.79", 
     "four_year": "3.15", 
     "key": "86", 
     "one_year": "2.79", 
     "six_months": "0", 
     "three_year": "3.09", 
     "two_year": "2.89", 
     "variable_rate": "0" 
     }, 
     { 
     "date": "2017-05-01", 
     "financial_institution": "Your Neighbourhood C.U.", 
     "five_year": "2.79", 
     "four_year": "3.15", 
     "key": "86", 
     "one_year": "2.79", 
     "six_months": "0", 
     "three_year": "3.09", 
     "two_year": "2.89", 
     "variable_rate": "0" 
     }, 
     { 
     "date": "2017-05-01", 
     "financial_institution": "Your Neighbourhood C.U.", 
     "five_year": "2.79", 
     "four_year": "3.15", 
     "key": "86", 
     "one_year": "2.79", 
     "six_months": "0", 
     "three_year": "3.09", 
     "two_year": "2.89", 
     "variable_rate": "0" 
     }] 
    } 

私は実際にあなたのデータでこれをテストすることができないので、あなたのコードは次のようになります。

func getJSONData() 
{ 
    let url = URL(string: ""); 

    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in 

     if error != nil 
     { 
      print("error") 
     } 

     else 
     { 
      if let mydata = data 
      { 
       do 
       { 
        let myJson = try JSONSerialization.jsonObject(with: mydata, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 

        let lenders = myJson["lenders"] as! [AnyObject]; 

        for lender in lenders 
        { 
         // This is how you access the data 
         let institution = lender["financial_institution"] as! String; 
         let fiveYear = lender["five_year"] as! CGFloat; 

         // Store the data however you are doing it 
        } 
       } 

       catch { 
        // catch error 
       } 
      } 
     } 
    } 

    task.resume() 

} 
+0

なぜ[貸し手]を '[AnyObject]'にキャストしていますか?これは明らかに '[[String:Any]]'です。ほとんどの場合、コンパイラエラーが発生します。そして、なぜそれらのセミコロンを追加しましたか? 1行に複数の連続したコマンドを書き込まない限り、Swiftではセミコロンを使用しないでください。 – vadian

+0

単一の貸し手オブジェクトは[String:Any]ですが、貸し手オブジェクトは[AnyObject]として定義された貸し手の配列です。 –

+0

それは間違っています。単一の貸し手は辞書であり、貸し手オブジェクトは何かの配列ではなく辞書の配列です。また、Swift 3のJSONタイプは、Any AnyではなくAnyです。 – vadian