ker*_*nic 5 json swift swifty-json
我正在使用Alamofire和SwiftyJSON从API获取和管理数据在做出初始请求后,我最终得到了JSON类型的嵌套集合
根据SwiftyJSON,我可以像这样循环数据 https://github.com/SwiftyJSON/SwiftyJSON#loop
for (key: String, subJson: JSON) in json {
//Do something you want
}
Run Code Online (Sandbox Code Playgroud)
同样,根据SwiftyJSON,我应该能够像这样设置新的值:https: //github.com/SwiftyJSON/SwiftyJSON#setter
json["name"] = JSON("new-name")
Run Code Online (Sandbox Code Playgroud)
我有一个嵌套的数据集合,我可以深入挖掘,但我无法改变对象并设置新的键:值对.我如何在Swift中做到这一点?
这是我的代码:
for (key: String, stop: JSON) in stops {
var physicalStops = stop["physicalStops"]
for (key: String, physicalStop: JSON) in physicalStops {
println("Prints out \(physicalStop) just fine")
// physicalStop["myNewkey"] = "Somevalue" // DOES NOT WORK (@lvalue is not identical to 'JSON)
// physicalStop["myNewkey"] = JSON("Somevalue") //SAME Story
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我想保留原始JSON对象的相同结构,但在每个子对象的第二级嵌套上添加额外的key:value.
首先,您可以使用varfor循环在循环内使值可修改.但是,JSON是struct,因此它表现为值类型,因此在嵌套示例中,您还必须将子JSON重新分配给父JSON,否则它只是修改循环内的值而不是原始结构中的值
var json: JSON = ["foo": ["amount": 2], "bar": ["amount": 3]]
for (key: String, var item: JSON) in json {
println("\(key) -> \(item)")
item["price"] = 10
json[key] = item
}
println(json)
Run Code Online (Sandbox Code Playgroud)