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ステートメントを受け入れませんでした。
私は何を間違えていますか?
json["items"]
配列をループする場合は、次を試してください。
for (key, subJson) in json["items"] {
if let title = subJson["title"].string {
println(title)
}
}
2番目の方法については、.arrayValue
はnonOptional
配列を返します。代わりに.array
を使用する必要があります。
if let items = json["items"].array {
for item in items {
if let title = item["title"].string {
println(title)
}
}
}
実際に以下を使用しているので、少しおかしいと感じました。
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!)
}
}
}
}
Forループでは、key
の型を"title"
型にすることはできません。 "title"
は文字列なので、key:String
を探します。そして、ループの内側では、必要に応じて"title"
を具体的に使用できます。また、of subJson
のタイプはJSON
でなければなりません。
また、JSONファイルは2D配列と見なすことができるため、json["items'].arrayValue
は複数のオブジェクトを返します。 if let title = json["items"][2].arrayValue
を使用することを強くお勧めします。
[〜#〜] 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
}
次の方法でjsonを反復処理できます。
for (_,subJson):(String, JSON) in json {
var title = subJson["items"]["2"]["title"].stringValue
print(title)
}
swiftyJSONのドキュメントをご覧ください。 https://github.com/SwiftyJSON/SwiftyJSON ドキュメントのループセクションを確認する