web-dev-qa-db-ja.com

SwiftyJSONでJSONをループする方法は?

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ステートメントを受け入れませんでした。

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

34
Cherif

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

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

2番目の方法については、.arrayValuenonOptional配列を返します。代わりに.arrayを使用する必要があります。

if let items = json["items"].array {
    for item in items {
        if let title = item["title"].string {
            println(title)
        }
    }
}
73
rintaro

実際に以下を使用しているので、少しおかしいと感じました。

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!)
                }
            }
        }
   }
10
CularBytes

Forループでは、keyの型を"title"型にすることはできません。 "title"は文字列なので、key:Stringを探します。そして、ループの内側では、必要に応じて"title"を具体的に使用できます。また、of 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

8
Dhruv Ramani

[〜#〜] readme [〜#〜] を確認してください

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

//If json is .Array
//The `index` is 0..<json.count's string value
for (index: String, subJson: JSON) in json {
    //Do something you want
}
2
tangplin

次の方法でjsonを反復処理できます。

for (_,subJson):(String, JSON) in json {

   var title = subJson["items"]["2"]["title"].stringValue

   print(title)

}

swiftyJSONのドキュメントをご覧ください。 https://github.com/SwiftyJSON/SwiftyJSON ドキュメントのループセクションを確認する

0
2rahulsk