用swiftyJson swift 3解析json

Posted

技术标签:

【中文标题】用swiftyJson swift 3解析json【英文标题】:parsing json with swiftyJson swift 3 【发布时间】:2017-07-11 21:32:25 【问题描述】:

虚拟问题: 我有我的 json:

       let jsonDestination = "[\"data\": \"destinos\": [\"idDestino\": \"1\",\"desDestino\": \"ASUNCION\",\"idDestino\": \"2\",\"desDestino\": \"MIAMI\"]]"

如果 "idDestino" 像这样,请尝试打印结果:

    if let dataFromString = jsonDestination.data(using: .utf8, allowLossyConversion: false) 
        let destinationJson = JSON(data: dataFromString)

        for item in destinationJson["destinos"].arrayValue 
            print(item["idDestino"].stringValue)
        
    

但是,千万不要进入执行print(item["idDestino"].stringValue)这一行

我也试试这个:

let firtsDestinationId = destinationJson[0]["data"]["destinos"]["idDestino"]
print(firtsDestinationId)

并得到这个错误:

_error NSError?域:“SwiftyJSONErrorDomain” - 代码:901 0x000060000005c080 此错误的意思是:无法合并,因为*** JSON 的类型不同

同样适用于:let firtsDestinationId = destinationJson["data"][0]["destinos"]["idDestino"]

所以..我真正的问题是我不知道如何捕获我的 json 数据...这里有什么可以帮助我的吗?

PD.:这个例子工作得很好:

let jsonDestination =  " \"people\": [ \"firstName\": \"Paul\", \"lastName\": \"Hudson\", \"isAlive\": true ,  \"firstName\": \"Angela\", \"lastName\": \"Merkel\", \"isAlive\": true ,  \"firstName\": \"George\", \"lastName\": \"Washington\", \"isAlive\": false  ] "

          if let dataFromString = jsonDestination.data(using: String.Encoding.utf8) 
        let destinationJson = JSON(data: dataFromString)

        for item in destinationJson["people"].arrayValue 
            print(item["firstName"].stringValue)
        
    

我的json有问题吗?怎样才能正确使用?

【问题讨论】:

【参考方案1】:

查看 JSON 对象中每个级别的 cmets

[-----------------------------------------Array
   --------------------------------------Obj
      "data":----------------------------Obj
         "destinos":[---------------------Array
            -----------------------------Obj
               "idDestino":"1",
               "desDestino":"ASUNCION"
            ,
              
               "idDestino":"2",
               "desDestino":"MIAMI"
            
         ]
      
   
]

您的以下代码不起作用,因为 destinos 的 JSON 元素是一个数组。

let firtsDestinationId = destinationJson[0]["data"]["destinos"]["idDestino"]

你不能试试下面的代码

let firtsDestinationId = destinationJson[0]["data"]["destinos"][0]["idDestino"]

【讨论】:

【参考方案2】:

对于其他想要通过 Json[array] 的人...在我的情况下,我编写了以下代码:

       for item in destinationJson["data"]["destinos"].arrayValue 
            print(item["idDestino"].stringValue)
        

【讨论】:

以上是关于用swiftyJson swift 3解析json的主要内容,如果未能解决你的问题,请参考以下文章

使用 swiftyjson 和 swift 解析嵌入的 json

swift、Alamofire、SwiftyJSON:如何解析 arrayObject

IOS/Swift/JSON:使用 swiftyJSON 解析嵌套的 JSON

Swift 使用 Alamofire 和 SwiftyJSON 解析 Json [关闭]

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

SwiftyJson 是不是可以更快地解析 swift json?