2015-04-23 5 views
1

У меня есть некоторые проблемы с разбором json с использованием быстрого кода.Swift json ошибка синтаксического анализа: не удалось отличить значение типа NSCFConstantString до NSArray

пример JSON

{"responce": "ok","orders": [{"id":"1"), {"id":"2"}, {"id":"3"} ]} 

и этот код работает отлично

let dataArray: NSArray = jsonResult["orders"] as! NSArray 

, но если я получаю {"responce": "ok","orders": ""} я получил error: Could not cast value of type __NSCFConstantString (0x10c7bfc78) to NSArray (0x10c7c0470).

Могу ли я как-то проверить, если значение массива или нет не рушиться?

+0

Вы используете SwiftyJSON? – skyline75489

+0

Я думаю, да, если NSJSONSerialization является частью SwiftyJSON –

ответ

3

Да, вы можете проверить, если значение является NSArray, делая это:

if let dataArray = jsonResult["orders"] as? NSArray { 

} 

Если результат jsonResult["orders"] является NSArray то будет установлен DataArray и вы будете идти в, если заявление.

+0

Супер, работаю, спасибо вам большое за помощь –

+0

Я подозреваю, что вы можете передать его прямо в Swift Array, изменив его на 'if let dataArray = jsonResult [" orders "] в виде? Array '(при условии, что он будет хранить' Strings' иначе 'Array ') –

+0

+1, но я думаю, вы имеете в виду 'if let orders = jsonResult [" orders "] as? [[String: String]] {...} 'или что-то в этом роде. Это массив словарей, а не массив строк. – Rob

1

Эта ошибка, скорее всего, вызвана ответом, который вы возвращаете из того, что я предполагаю, это сервер, не являющийся JSON, но являющийся чем-то вроде ответа HTML/XML, говорящий, что сервер либо не может быть достигнут, либо что ваш запрос/сообщение недействителен (отсюда тот факт, что значение было «NSCFConstantString»).

Использование ответа Джеймса - отличный способ проверить, является ли это значение массивом, но вы можете протестировать свои запросы с помощью программы, такой как почтальон, чтобы узнать, что он ответил, а затем жестко кодировать способ обработки эта ошибка на стороне пользователя.

+1

Вы правы, что он должен убедиться, что ответ был действительным JSON или нет, но он делает это, когда выполняется синтаксический анализ JSON, а не здесь, где он захватывает значение «заказов» из ранее обработанного объекта JSON. – Rob

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