2015-06-21 3 views
0

Я пытаюсь десериализовать объект JSON, который хранится в массиве. Я использую SwiftyJSON, но программа не ведет себя так, как я ожидал.Анализ данных и передача их между представлениями SwiftyJSON и AlamoFire

Это массив:

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", "ga me_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 ":" TRADITIONAL ", "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 и заполняю его значением объекта 1 из массива:

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

Когда я печатаю весь объект self.gameState на консоли, все хорошо, и похоже, что я ожидал. Однако, когда я хочу просто использовать 1 значение этого объекта JSON, я не могу заставить его работать.

Я попытался с:

self.gameState["game_type"].string; 

И:

var foo = JSON(self.gameState); 

Но это и не компилируется. Что я делаю не так?

ответ

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

Шаг 2

После того как данные JSON хранится в dictionary, просто сделать:

let gameState = jsonData["game_type"]! 

После этого у вас не должно быть проблем.

Надеюсь, я смог пролить свет, прокомментируйте, если что-то неясно.

+0

Спасибо за ваш ответ! Это, к сожалению, не помогло мне решить проблему. Я получаю сообщение об ошибке при попытке сделать: self.gameState [1]. Xcode говорит: не может индексировать значение типа «JSON» с индексом типа «int», –

Смежные вопросы