2016-03-28 22 views
1

Javaエクスペリエンスの負荷がSwiftの相対n00bです。私は、コンパイル時と実行時のホストに実行しておくSwiftを使用したJSONからの配列の抽出

{ 
     "status" : "OPEN", 
     "description" : “…”, 
     "name" : “…”, 
     "owner" : 1, 
     "images" : [ 
     { 
      "id" : 1, 
      "path" : "\/uploads\/1-60003456.jpeg" 
     } 
     ], 
     "created" : 1459135829000, 
     "id" : 1 
    } 

...私はできるだけ多く3などの画像を持っている可能性があり、「画像」配列を、抽出に失敗していたから、次のJSONを、持っていますエラー。例えば、SwiftyJSONドキュメントから、このコード: "

images.append(myImages![0]["path"] as String) 

がエラーを与える:

for (key,subJson):(String, JSON) in json { 
    if(key == "images"){ 
     let myImages = subJson.array 
     print(myImages![0]["path"]) 
    } 
} 

は正しく、まだ私の[文字列]の画像でその値を保存しようと、「パス」の値を出力します"JSON型の値にString型のインデックスを添字することはできません"

XCodeは「画像」のNSDictionaryですか(または辞書の配列ですか?)、そのようにキャストしようとすると私は "JSON型の値を変換してNSDictionary型に変換できません"というメッセージが表示されます。

私はそれが単純な構文エラーだと確信していますが、この時点で、私は様々なエラーの間を行き来しています。ご指摘ありがとうございます。

答えて

0

ダウンキャスティングを使用しないでください。SwiftyJSONは既にこの作業を行っています。 [文字列ではありません

if let path = myImages![0]["path"].string { 
    images.append(path) 
} 

myImages![0]["path"]場合、:それはあなたが安全にそれをアンラップしたいオプションですので

myImages![0]["path"].string 

:SwiftyJSONは、それはすでに解析されたオブジェクトの文字列表現のための任意のゲッターを持っています

myImages![0]["path"].array 
myImages![0]["path"].dictionary 
myImages![0]["path"].int 

など

:JSONの種類があるようSwiftyJSONは多くのオプションゲッターとしてあなたを提供していますSwiftyJSONで

は、あなたが直接添字ことができます。

if let firstImagePath = json["images"][0]["path"].string { 
    // use "firstImagePath" 
} 

締結する、ループの別の種類:

if let images = json["images"] { 
    for image in images { 
     if let path = image["path"].string { 
      // use "path" 
     } 
    } 
} 
+0

は完全に働きました。ありがとう、エリック。 – MolonLabe

+0

ようこそ。 – Moritz

関連する問題