如何使用 SwiftyJson 解析 JSON

Posted

技术标签:

【中文标题】如何使用 SwiftyJson 解析 JSON【英文标题】:How To Parse JSON with SwiftyJson 【发布时间】:2016-09-09 02:10:32 【问题描述】:

这是数据

[
  "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

我在 Xcode 7 中使用 SwiftyJson 和 Swift,有没有其他使用 SwiftyJson 的方法?

【问题讨论】:

你确定是来自服务器的JSON,因为它是无效的!!您缺少逗号来分隔数组内的元素。 我刚刚编辑了它。但这是来自服务器 sanofi.purplebug.net/api/tracker-monthly/09/2016/1 的 json 数组 【参考方案1】:

您错过了使用 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

希望对你有所帮助。

【讨论】:

哇,回答了。

以上是关于如何使用 SwiftyJson 解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftyJSON 在 Swift 中解析这个 JSON 对象?

如何获取解析 json - SwiftyJSON

如何使用 Alamofire 和 SwiftyJSON 正确解析 JSON

我应该如何使用 Alamofire 和 SwiftyJSON 解析来自 API 的 JSON 响应?

swift、Alamofire、SwiftyJSON:如何解析 arrayObject

如何使用 SwiftyJSON 解析特定格式的 json?