我正在尝试反序列化数组中保存的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);
但这不是编译。我究竟做错了什么?
答案 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"]!
之后你不应该有问题。
我希望我能说清楚,如果有什么不清楚的话请发表评论。