解析api响应JSON以获取内容值

时间:2016-07-19 17:00:33

标签: json swift swifty-json

背景

我有一个ios应用程序正在接收来自帖子的回复。我只是想在内容标记中提取id。但是我在帮助页面上看到的所有语法似乎都不起作用。

self.post("stands/build", data: dataDictionary).responseString { (response) -> Void in
     let responseValue = response.result.value
     let new_data =  JSON(responseValue!)
     print(new_data)
     print(new_data[0])
     print(new_data["message"])
     print(new_data["content"])

打印:

{"message":"Success","content":{"id":351,"user_id":2,"name":"test","creator":null,"size":0,"description":"Test"}}
null
null
null

我正在使用import SwiftyJSON

问题:

将打印用户ID的代码为:351.

我认为print(new_data["content]["id"])会起作用,但它只会给出空值

编辑1

            if let dataFromString = responseValue!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {

                //SwiftyJSON, construct JSON.
                let json = JSON(data: dataFromString)
                print(json["content"]["id"])

            }

导致此错误:

2016-07-19 14:17:15.888 MYPROJECT[13799:3666542] -[__NSCFDictionary dataUsingEncoding:allowLossyConversion:]: unrecognized selector sent to instance 0x7ffe2e0416a0
2016-07-19 14:17:15.946 MYPROJECT[13799:3666542] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary dataUsingEncoding:allowLossyConversion:]: unrecognized selector sent to instance 0x7ffe2e0416a0'

编辑2

let id: Int = JSON["content"]["id"].intValue

给出错误instance member 'subscript' cannot be used on type 'JSON'

编辑3差不多......

self.post("stands/build", data: dataDictionary).responseString { (response) -> Void in
    let responseValue = response.result.value
    let new_dict = (responseValue as! NSDictionary) 
    print(new_dict["content"]!["id"])

打印Optional(356)

如何打印356?

编辑4

print(new_dict["content"]!["id"]!!.intValue)

的工作原理。

尽管如此,我认为我的解决方案很草率。以下解决方案都没有起作用,但我会提出解决方案,这使我得到了这个答案。

3 个答案:

答案 0 :(得分:1)

尝试以下代码

if let new_data =  JSON(responseValue!) as? NSDictionary{
    let content = new_data["content"] as! NSdictionary 
    let user_id = content[user_id] as! Int  
    print(format:"user_id :: %d",user_id)
}
else{ 
   print("no data found..")
}

答案 1 :(得分:0)

您忘记使用JSON对象的int属性。

一个简单的例子:

if let id: Int = json["someData"]["someValue"].int {
  // id was defined properly
}
else {
  print("parsing error: \(json["someData"]["someValue"])")
}

或者您可以使用intValue

获得一些价值
let id: Int = json["someData"]["someValue"].intValue // defines some value or zero as fallback

我希望这可以帮助您解决问题。

答案 2 :(得分:0)

从日志中

首先,responseValue不是JSON对象,它只是一个json字符串。 如果是的话,

if let dataFromString = responseValue.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {

    //SwiftyJSON, construct JSON.
    let json = JSON(data: dataFromString)
    print(json["content"]["id"])

}

这应该有效!