36

SwiftyJSON で解析できる json があります。

if let title = json["items"][2]["title"].string {
     println("title : \(title)")
}

完璧に動作します。

しかし、私はそれをループすることができませんでした。私は2つの方法を試しました.最初の方法は

// TUTO :
//If json is .Dictionary
for (key: String, subJson: JSON) in json {
    ...
}
// WHAT I DID :
for (key: "title", subJson: json["items"]) in json {
    ...
}

XCode は for ループ宣言を受け入れませんでした。

2番目の方法:

// TUTO :
if let appArray = json["feed"]["entry"].arrayValue {
     ...
}
// WHAT I DID :
if let tab = json["items"].arrayValue {
     ...
}

XCode は if ステートメントを受け入れませんでした。

私は何を間違っていますか?

4

5 に答える 5

79

json["items"]配列をループしたい場合は、次を試してください:

for (key, subJson) in json["items"] {
    if let title = subJson["title"].string {
        println(title)
    }
}

2番目のメソッドについては、配列以外.arrayValueを返します。代わりに次を使用する必要があります。 Optional.array

if let items = json["items"].array {
    for item in items {
        if let title = item["title"].string {
            println(title)
        }
    }
}
于 2015-02-06T15:28:17.993 に答える
11

実際に以下を使用しているため、自分で説明したのは少し奇妙だと思います。

for (key: String, subJson: JSON) in json {
   //Do something you want
}

構文エラーが発生します(少なくともSwift 2.0では)

正しかった:

for (key, subJson) in json {
//Do something you want
}

確かに key は文字列で、subJson は JSON オブジェクトです。

しかし、私は少し違うやり方をするのが好きです。ここに例があります:

//jsonResult from API request,JSON result from Alamofire
   if let jsonArray = jsonResult?.array
    {
        //it is an array, each array contains a dictionary
        for item in jsonArray
        {
            if let jsonDict = item.dictionary //jsonDict : [String : JSON]?
            {
                //loop through all objects in this jsonDictionary
                let postId = jsonDict!["postId"]!.intValue
                let text = jsonDict!["text"]!.stringValue
                //...etc. ...create post object..etc.
                if(post != nil)
                {
                    posts.append(post!)
                }
            }
        }
   }
于 2015-07-09T21:05:36.147 に答える
8

for ループでは、 の型を の型にすることはkeyできません"title"。は文字列なので"title"、 : に進みますkey:String。そして、Inside the Loop は、"title"必要なときに具体的に使用できます。また、 の型は でsubJsonなければなりませんJSON

また、JSON ファイルは 2D 配列と見なすことができるため、json["items'].arrayValueは複数のオブジェクトを返します。: を使用することを強くお勧めしますif let title = json["items"][2].arrayValue

見てください:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html

于 2015-02-06T12:48:36.620 に答える