В моем приложении для iOS 5 есть NSString
строка JSON. Я хотел бы десериализовать это строковое представление JSON в нативный NSDictionary
объект.
"{\"password\" : \"1234\", \"user\" : \"andreas\"}"
Я попробовал следующий подход:
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:@"{\"2\":\"3\"}"
options:NSJSONReadingMutableContainers
error:&e];
Но он выдает ошибку во время выполнения. Что я делаю не так?
-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0x1372c
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0x1372c'
Ответы:
Похоже, вы передаете
NSString
параметр, где вы должны передатьNSData
параметр:источник
nil
качестве ошибки вместо&e
XCode 5Например, у вас есть
NSString
специальные символы вNSString
strChangetoJSON. Затем вы можете преобразовать эту строку в ответ JSON, используя приведенный выше код.источник
Я сделал категорию из ответа @Abizern
Используйте это так,
источник
error
в этих случаях, а вместо этого проверять, является ли возвращаемое значение нулевым или нет перед возвратом. т. е.return json ?: nil;
мелкий придира, но стоит упомянуть, я думаю.nil
.С Swift 3 и Swift 4,
String
есть метод, который называетсяdata(using:allowLossyConversion:)
.data(using:allowLossyConversion:)
имеет следующую декларацию:В Swift 4 можно использовать
String
sdata(using:allowLossyConversion:)
вместе сJSONDecoder
sdecode(_:from:)
для десериализации строки JSON в словарь.Кроме того, с Swift 3 и Swift 4,
String
sdata(using:allowLossyConversion:)
также может использоваться вместе сJSONSerialization
sjsonObject(with:options:)
для десериализации строки JSON в словарь.# 1. Swift 4 решение
В Swift 4
JSONDecoder
есть метод с именемdecode(_:from:)
.decode(_:from:)
имеет следующую декларацию:Код Playground ниже показывает, как использовать
data(using:allowLossyConversion:)
иdecode(_:from:)
чтобы получитьDictionary
формат в формате JSONString
:# 2. Swift 3 и Swift 4 решение
С Swift 3 и Swift 4,
JSONSerialization
есть метод, который называетсяjsonObject(with:options:)
.jsonObject(with:options:)
имеет следующую декларацию:Код Playground ниже показывает, как использовать
data(using:allowLossyConversion:)
иjsonObject(with:options:)
чтобы получитьDictionary
формат в формате JSONString
:источник
Использование кода Abizern для Swift 2.2
источник