如何使用 SwiftyJSON 遍历 JSON?
How to loop through JSON with SwiftyJSON?
我有一个可以用 SwiftyJSON 解析的 json :
if let title = json["items"][2]["title"].string {
println("title : \(title)")
}
完美运行。
但我无法遍历它。我尝试了两种方法,第一种是
// 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 循环声明。
第二种方法:
// TUTO :
if let appArray = json["feed"]["entry"].arrayValue {
...
}
// WHAT I DID :
if let tab = json["items"].arrayValue {
...
}
XCode 没有接受 if 语句。
我做错了什么?
for循环中,key
的类型不能是"title"
的类型。因为 "title"
是一个字符串,所以去寻找:key:String
。然后在循环内部,您可以在需要时专门使用 "title"
。而且 subJson
的类型必须是 JSON
.
并且由于 JSON 文件可以被视为二维数组,因此 json["items'].arrayValue
将 return 多个对象。强烈建议使用:if let title = json["items"][2].arrayValue
.
如果要遍历 json["items"]
数组,请尝试:
for (key, subJson) in json["items"] {
if let title = subJson["title"].string {
println(title)
}
}
至于第二种方法,.arrayValue
returns 非 Optional
数组,应该用.array
代替:
if let items = json["items"].array {
for item in items {
if let title = item["title"].string {
println(title)
}
}
}
请检查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
}
我自己解释的有点奇怪,因为实际使用:
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!)
}
}
}
}
您可以通过以下方式遍历 json:
for (_,subJson):(String, JSON) in json {
var title = subJson["items"]["2"]["title"].stringValue
print(title)
}
看看 SwiftyJSON 的文档。
https://github.com/SwiftyJSON/SwiftyJSON
浏览文档的循环部分
我有一个可以用 SwiftyJSON 解析的 json :
if let title = json["items"][2]["title"].string {
println("title : \(title)")
}
完美运行。
但我无法遍历它。我尝试了两种方法,第一种是
// 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 循环声明。
第二种方法:
// TUTO :
if let appArray = json["feed"]["entry"].arrayValue {
...
}
// WHAT I DID :
if let tab = json["items"].arrayValue {
...
}
XCode 没有接受 if 语句。
我做错了什么?
for循环中,key
的类型不能是"title"
的类型。因为 "title"
是一个字符串,所以去寻找:key:String
。然后在循环内部,您可以在需要时专门使用 "title"
。而且 subJson
的类型必须是 JSON
.
并且由于 JSON 文件可以被视为二维数组,因此 json["items'].arrayValue
将 return 多个对象。强烈建议使用:if let title = json["items"][2].arrayValue
.
如果要遍历 json["items"]
数组,请尝试:
for (key, subJson) in json["items"] {
if let title = subJson["title"].string {
println(title)
}
}
至于第二种方法,.arrayValue
returns 非 Optional
数组,应该用.array
代替:
if let items = json["items"].array {
for item in items {
if let title = item["title"].string {
println(title)
}
}
}
请检查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
}
我自己解释的有点奇怪,因为实际使用:
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!)
}
}
}
}
您可以通过以下方式遍历 json:
for (_,subJson):(String, JSON) in json {
var title = subJson["items"]["2"]["title"].stringValue
print(title)
}
看看 SwiftyJSON 的文档。 https://github.com/SwiftyJSON/SwiftyJSON 浏览文档的循环部分