0

我正在尝试在 XCode 上使用 SwiftyJSON 从 JSON 打印属性(显然使用 Swift 语言)

我的第一行打印得很好,但第二行什么也没打印,我在在线解析器中检查了第一个 println() 的输出,并且字符串是一致的:

var jdata = JSON(self.serverResponse)
println("jdata RAW: "+jdata.stringValue)
println("jdata.responseData: "+jdata["responseData"].stringValue)

这是打印这两个东西的结果,你可以看到第二个是空白的:

jdata RAW: 
{
    "responseData": {
        "emotion":"",
        "lastinput":"What is your favourite color",
        "answer":"My favourite color is orange. What is yours?",
        "link": {
            "href":"",
            "target":""
        },
        "extraData": {
            "action":{"name":"displayClickableList","values":[{"label":"green","key":"1"},{"label":"yellow","key":"2"},{"label":"red","key":"3"}]},"type":"list"
        },
        "responseSession": {
            "id":"1ebfcd96c3c1f206dfb4087bc553",
            "transaction":"2"
        },
        "responseDetails": null,
        "responseStatus": 200,
        "applicationUrl": "http://moto-dev.cloud.com:88/moto-va-1/;jsessionid=1ebfc206dfb4087bc553"
    }
}


jdata.responseData: 

我是 Swift 新手,这里出了什么问题?

4

2 回答 2

0

您的属性似乎是一个字典,无法转换为字符串值。

但是您可以像这样简单地打印它:

println("jdata.responseData: \(jdata["responseData"])")

于 2015-05-14T11:23:06.077 回答
0

好的,我找到了一种获取嵌套“动作”属性内容的方法。Swifty 似乎无法打印 jdata["responseData"] 因为它不是字符串(它是一个包含更多内容的字典),也无法将其转换为字符串。对我有用的方法是通过 JSONS 的不同层访问我想要的最终属性,然后处理它。例如:

var jdata = JSON(data: data!)
var jaction=jdata["responseData"]["extraData"]["action"]
println("jaction")
println(jaction.stringValue)

将返回:

jaction
%7B%22name%22%3A%22displayClickableList%22%2C%22values%22%3A%5B%7B%22label%22%3A%22green%22%2C%22key%22%3A%221%22%7D%2C%7B%22label%22%3A%22yellow%22%2C%22key%22%3A%222%22%7D%2C%7B%22label%22%3A%22red%22%2C%22key%22%3A%223%22%7D%5D%7D

只有这样,由于没有更多的 JSON 嵌套,我才能获取那个奇怪的字符串并对其进行 URL 解码。打印类似(或介于两者之间的任何内容):

println(jaction=jdata["responseData"].stringValue) //returns nothing!
println(jaction=jdata["responseData"]["extraData"].stringValue) //returns nothing!

不会返回任何内容,因为内容是字典,而不是字符串。这不是一种直观的行为,我不得不整个上午都在努力理解它的工作方式,在 Android 中我以另一种方式做到这一点。

于 2015-05-14T11:29:12.317 回答