5 ответов:
NSData *data = [strChangetoJSON dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];например у вас есть
NSStringспециальные символыNSStringstrChangetoJSON. Затем вы можете преобразовать эту строку в JSON ответ, используя приведенный выше код.
Я сделал категорию из @Abizern answer
@implementation NSString (Extensions) - (NSDictionary *) json_StringToDictionary { NSError *error; NSData *objectData = [self dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData options:NSJSONReadingMutableContainers error:&error]; return (!json ? nil : json); } @endиспользуйте его вот так,
NSString *jsonString = @"{\"2\":\"3\"}"; NSLog(@"%@",[jsonString json_StringToDictionary]);
С Swift 3 и Swift 4,
Stringимеет метод под названиемdata(using:allowLossyConversion:).data(using:allowLossyConversion:)есть следующее объявление:func data(using encoding: String.Encoding, allowLossyConversion: Bool = default) -> Data?возвращает данные, содержащие представление строки, закодированной с использованием заданной кодировки.
С 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:)есть следующее объявление:func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodableдекодирует значение верхнего уровня данного типа из данного представления JSON.
код детской площадки ниже показывает, как использовать
data(using:allowLossyConversion:)иdecode(_:from:), чтобы получитьDictionaryв формате JSONString:let jsonString = """ {"password" : "1234", "user" : "andreas"} """ if let data = jsonString.data(using: String.Encoding.utf8) { do { let decoder = JSONDecoder() let jsonDictionary = try decoder.decode(Dictionary<String, String>.self, from: data) print(jsonDictionary) // prints: ["user": "andreas", "password": "1234"] } catch { // Handle error print(error) } }
#2. Swift 3 и Swift 4 решение
С Swift 3 и Swift 4,
JSONSerializationимеет метод под названиемjsonObject(with:options:).jsonObject(with:options:)есть следующее объявление:class func jsonObject(with data: Data, options opt: JSONSerialization.ReadingOptions = []) throws -> Anyвозвращает объект Foundation из заданных данных JSON.
код игровой площадки ниже показывает, как использовать
data(using:allowLossyConversion:)иjsonObject(with:options:)для полученияDictionaryв формате JSONString:import Foundation let jsonString = "{\"password\" : \"1234\", \"user\" : \"andreas\"}" if let data = jsonString.data(using: String.Encoding.utf8) { do { let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: []) as? [String : String] print(String(describing: jsonDictionary)) // prints: Optional(["user": "andreas", "password": "1234"]) } catch { // Handle error print(error) } }
С помощью Abizern код для swift 2.2
let objectData = responseString!.dataUsingEncoding(NSUTF8StringEncoding) let json = try NSJSONSerialization.JSONObjectWithData(objectData!, options: NSJSONReadingOptions.MutableContainers)
Comments