我正在尝试使用XCode上的SwiftyJSON从JSON打印属性(显然使用Swift语言)
我的第一行打印得很好,但第二行打印没有,我在在线解析器中检查了第一个println()的输出,并且striing是一致的:
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的新手,这里出了什么问题?
答案 0 :(得分:0)
您的属性似乎是字典,无法转换为字符串值。
但你可以像这样简单地打印出来:
println("jdata.responseData: \(jdata["responseData"])")
答案 1 :(得分: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!
将不返回任何内容,因为内容是Dictionary,而不是字符串。 这不是一个直观的行为,我不得不花费整个上午努力了解它的工作方式,在Android中我以另一种方式做到这一点。