我正在尝试反序列化数组中保存的 JSON 对象。我正在使用 SwiftyJSON,但程序的行为不符合我的预期。
这是数组:
var GamesList = [JSON]();
该数组包含我的 2 个 JSON 对象:
{ "game_type": "传统", “game_player_winner”:“”, "game_state": "已开始", “self_left”:“2”, “ self 权利”:“1”, “self_name”:“测试2”, “对手权利”:“1”, "opponent_name": "test1", “game_guid”:“153fac87-bfc4-367f-41fa-944753dc32c8”, “游戏空闲时间”:755858, “对手左”:“3” }, { "game_type": "传统", “game_player_winner”:“”, "game_state": "已开始", “self_left”:“2”, “ self 权利”:“1”, “self_name”:“测试2”, “对手权利”:“1”, "opponent_name": "约翰内斯沃特", “game_guid”:“153fac87-bfc4-367f-41fa-944753dc32c9”, “游戏空闲时间”:755858, “对手左”:“3” }] 这是我的游戏状态:可选({ "game_type": "传统", “game_player_winner”:“”, "game_state": "已开始", “self_left”:“2”, “ self 权利”:“1”, “self_name”:“测试2”, “对手权利”:“1”, "opponent_name": "测试用户", “game_guid”:“153fac87-bfc4-367f-41fa-944753dc32c9”, “游戏空闲时间”:755858, “对手左”:“3” }
我创建一个新的 JSON 对象,并用数组中对象 1 的值填充它:
var gameState : JSON?;
self.gameState = GamesList[1];
当我将整个 self.gameState 对象打印到控制台时,一切都很好,它看起来就像我所期望的那样。但是,当我只想使用此 JSON 对象的 1 个值时,我似乎无法让它工作。
我尝试过:
self.gameState["game_type"].string;
并且:
var foo = JSON(self.gameState);
但这都无法编译。我究竟做错了什么?
最佳答案
我知道这可能令人沮丧,但这实际上是一个非常简单的修复。 不久前我在使用 AlamoFire 时遇到了同样的问题。
我可以明白为什么它没有编译,但您正在尝试从 Array
中检索 key
,如下所示:
self.gameState["game_type"]
但是Array
类型没有key:value
对,简单来说它是通过索引访问的:
self.gameState[1]
第 1 步
因此,不要使用数组,而是将 JSON 放入字典中。之后,请按照下列步骤操作:
确保您的 JSON 数据存储在字典
中,例如:
let jsonData: [String:String] = //your JSON
(如果您要操作 jsonData
中的数据,请使用 var 键盘。
第 2 步
将 JSON 数据存储在字典
中后,只需执行以下操作:
let gameState = jsonData["game_type"]!
此后您应该不会有问题。
希望我能够阐明一些观点,如果有任何不清楚的地方,请发表评论。
关于json - 使用 SwiftyJSON 和 AlamoFire 解析数据并在 View 之间传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30966856/