如何使用 SwiftyJson 解析 JSON
How To Parse JSON with SwiftyJson
这是数据
[{
"mineral": "Phosphorus",
"data": [ 7.65, 19.74, 15.48 ]
},
{
"mineral": "Calcium",
"data": [ 1.65, 1.32, 1.78 ]
}]
这是我用来解析它的代码。
if let dataFromString = self.response.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
var valuesB = [Double]()
for i in 0..<json.count {
self.nutrient.append(json[i]["mineral"].stringValue)
print("Nutrient: \(json[i]["mineral"].stringValue)\n")
for j in 0..<json[i]["data"].count {
valuesB.append(json[i]["data"][j].doubleValue)
print("Values: \(json[i]["data"][j].doubleValue)")
}
values.append(valuesB)
}
}
但我得到的只是
Nutrient: Phosphorus
Values: 0.0
Values: 0.0
Values: 0.0
Nutrient: Calcium
Values: 0.0
Values: 0.0
Values: 0.0
我在 Swift 7 和 Swift 中使用 SwiftyJson,还有其他方法可以使用 SwiftyJson 吗?
您缺少使用 SwiftyJSON 的 Optional getters 将 JSON 转换为 JSON 数组,而 JSON 未被解释作为一个正确的数组,所以你需要像下面的代码一样使用它:
let jsonString = "[{\"mineral\": \"Phosphorus\",\"data\": [ 7.65, 19.74, 15.48 ]},{\"mineral\": \"Calcium\", \"data\": [ 1.65, 1.32, 1.78 ]}]"
if let dataFromString = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
// Check if the JSON is an array otherwise nil
if let jsonArray = json.array {
var valuesB = [Double]()
for i in 0..<jsonArray.count {
print(jsonArray[i]["mineral"].stringValue)
print("Nutrient: \(json[i]["mineral"].stringValue)\n")
for j in 0..<jsonArray[i]["data"].count {
valuesB.append(jsonArray[i]["data"][j].doubleValue)
print("Values: \(jsonArray[i]["data"][j].doubleValue)")
}
}
}
}
您应该会在控制台中看到:
Phosphorus
Nutrient: Phosphorus
Values: 7.65
Values: 19.74
Values: 15.48
Calcium
Nutrient: Calcium
Values: 1.65
Values: 1.32
Values: 1.78
希望对你有所帮助。
这是数据
[{
"mineral": "Phosphorus",
"data": [ 7.65, 19.74, 15.48 ]
},
{
"mineral": "Calcium",
"data": [ 1.65, 1.32, 1.78 ]
}]
这是我用来解析它的代码。
if let dataFromString = self.response.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
var valuesB = [Double]()
for i in 0..<json.count {
self.nutrient.append(json[i]["mineral"].stringValue)
print("Nutrient: \(json[i]["mineral"].stringValue)\n")
for j in 0..<json[i]["data"].count {
valuesB.append(json[i]["data"][j].doubleValue)
print("Values: \(json[i]["data"][j].doubleValue)")
}
values.append(valuesB)
}
}
但我得到的只是
Nutrient: Phosphorus
Values: 0.0
Values: 0.0
Values: 0.0
Nutrient: Calcium
Values: 0.0
Values: 0.0
Values: 0.0
我在 Swift 7 和 Swift 中使用 SwiftyJson,还有其他方法可以使用 SwiftyJson 吗?
您缺少使用 SwiftyJSON 的 Optional getters 将 JSON 转换为 JSON 数组,而 JSON 未被解释作为一个正确的数组,所以你需要像下面的代码一样使用它:
let jsonString = "[{\"mineral\": \"Phosphorus\",\"data\": [ 7.65, 19.74, 15.48 ]},{\"mineral\": \"Calcium\", \"data\": [ 1.65, 1.32, 1.78 ]}]"
if let dataFromString = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
// Check if the JSON is an array otherwise nil
if let jsonArray = json.array {
var valuesB = [Double]()
for i in 0..<jsonArray.count {
print(jsonArray[i]["mineral"].stringValue)
print("Nutrient: \(json[i]["mineral"].stringValue)\n")
for j in 0..<jsonArray[i]["data"].count {
valuesB.append(jsonArray[i]["data"][j].doubleValue)
print("Values: \(jsonArray[i]["data"][j].doubleValue)")
}
}
}
}
您应该会在控制台中看到:
Phosphorus
Nutrient: Phosphorus
Values: 7.65
Values: 19.74
Values: 15.48
Calcium
Nutrient: Calcium
Values: 1.65
Values: 1.32
Values: 1.78
希望对你有所帮助。