使用SwiftyJSON和AlamoFire解析数据并在视图之间传输数据

时间:2015-06-21 16:37:02

标签: json swift

我正在尝试反序列化数组中保存的JSON对象。我正在使用SwiftyJSON,但该程序的行为并不像我预期的那样。

这是数组:

var GamesList = [JSON]();

该数组包含我的2个JSON对象:

{   “game_type”:“传统”,   “game_player_winner”:“”,   “game_state”:“开始”,   “self_left”:“2”,   “self_right”:“1”,   “self_name”:“test2”,   “opponent_right”:“1”,   “opponent_name”:“test1”,   “game_guid”:“153fac87-bfc4-367f-41fa-944753dc32c8”,   “game_idle_time”:755858,   “opponent_left”:“3” },{   “game_type”:“传统”,   “game_player_winner”:“”,   “game_state”:“开始”,   “self_left”:“2”,   “self_right”:“1”,   “self_name”:“test2”,   “opponent_right”:“1”,   “opponent_name”:“johannesswart”,   “game_guid”:“153fac87-bfc4-367f-41fa-944753dc32c9”,   “game_idle_time”:755858,   “opponent_left”:“3” }] hier是je gamestate:可选({   “game_type”:“传统”,   “game_player_winner”:“”,   “game_state”:“开始”,   “self_left”:“2”,   “self_right”:“1”,   “self_name”:“test2”,   “opponent_right”:“1”,   “opponent_name”:“testuser”,   “game_guid”:“153fac87-bfc4-367f-41fa-944753dc32c9”,   “game_idle_time”:755858,   “opponent_left”:“3” }

我创建了一个新的JSON对象,并使用Array中的对象1的值填充它:

var gameState : JSON?;
self.gameState = GamesList[1];

当我将整个self.gameState对象打印到控制台时,一切都很好,它看起来像我的预期。但是当我想只使用这个JSON对象的1个值时,我似乎无法让它工作。

我尝试过:

self.gameState["game_type"].string;

并且:

var foo = JSON(self.gameState);

但这不是编译。我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

我可以看到这可能令人沮丧,但这实际上是一个非常简单的修复。 在与AlamoFire合作时我曾经遇到过同样的问题。

我可以看到为什么它没有编译,你试图从key中检索Array,如:

self.gameState["game_type"]

Array类型没有key:value对,简单就可以通过索引访问:

self.gameState[1]

第1步

因此,不要使用数组,而是将JSON放入字典中。之后,请按照下列步骤操作:

确保您的JSON数据存储在dictionary中,例如:

let jsonData: [String:String] = //your JSON

(如果要操纵jsonData中的数据,请使用var键盘。

第2步

将JSON数据存储在dictionary后,只需执行以下操作:

let gameState = jsonData["game_type"]!

之后你不应该有问题。

我希望我能说清楚,如果有什么不清楚的话请发表评论。