#arrays #dictionary #swift3
#массивы #словарь #swift3
Вопрос:
У меня есть этот экземпляр:
var commands = [[String: Any]]()
После некоторых вычислений его результат:
[["command": 50022, "homes": [["gateways": [["mac": "845DD74B405E", "services": [["iid": 9, "name": "Some name"]], "aid": 1]], "name": "H1"]]], ["command": 50025, "services": [["mac": "845DD74B405E", "iid": 9, "aid": 1, "new_name": "Some name"]]]]
Я хочу преобразовать его ( commands
) в JSON с помощью SwiftyJSON:
let json = JSON(commands)
print(json) // "unknown"
но результат всегда unknown
есть .
Затем я проверяю правильность commands
, чтобы убедиться, что он конвертируется в JSON. Но я получил false
JSONSerialization.isValidJSONObject(commands)
, что неожиданно!
Есть ли у вас какие-либо идеи, почему commands
(массив словаря) НЕ является допустимым JSON
объектом?
Спасибо
Комментарии:
1. Ваш массив действителен.
2. Я согласен с вами, что массив действителен (я проверил его с помощью
print(type(of: commands))
-> array). Но что меня смущает: если он действителен, то почему он не является допустимым объектом JSON?3. Это также допустимый объект JSON. Я доказал это на игровой площадке.
Ответ №1:
Проблема в моих commands
целых числах, 50022
и 50025
. В моем коде они определены в enum
of UInt32
. И когда я скопировал их на игровую площадку для проверки, Swift преобразует его в Int
. Вот почему я всегда добиваюсь успеха на игровой площадке.
Возвращаясь к моему коду, Swift 3 ожидает, что число будет равно an Int
, чтобы успешно преобразовать его в объект JSON. Swift 2 не имеет такого поведения.
Итак, после того, как я изменил свое enum
определение с UInt32
на Int
, оно просто прекрасно работает!
Спасибо всем.