2015-05-14 36 views
0

我试图打印使用SwiftyJSON上的XCode一个JSON属性(很明显,斯威夫特语言)访问一个JSON属性与SwitfyJSON返回一个空字符串

我的第一行印好,但第二个打印什么,我已经检查了第一的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

您的财产似乎是一本字典,不能转换为字符串值。

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

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

+0

编译器不会接受该行,是否有一些转义字符在那里丢失? – Josh

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嵌套事情,我可以把那个奇怪的字符串和URLdecode它。 印像(或任何在两者之间):

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

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