У меня есть следующие данные, сохраненные в виде NSString
:
{
Key = ID;
Value = {
Content = 268;
Type = Text;
};
},
{
Key = ContractTemplateId;
Value = {
Content = 65;
Type = Text;
};
},
Я хочу преобразовать эти данные в файл, NSDictionary
содержащий пары ключ-значение.
Сначала я пытаюсь преобразовать NSString
в объекты JSON следующим образом:
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
Однако, когда я пытаюсь:
NSString * test = [json objectForKey:@"ID"];
NSLog(@"TEST IS %@", test);
Я получаю значение как NULL
.
Кто-нибудь может подсказать, в чем проблема?
objective-c
xcode
json
nsstring
nsdictionary
Гайбраш
источник
источник
Ответы:
Я считаю, что вы неправильно интерпретируете формат JSON для значений ключей. Вы должны сохранить свою строку как
NSString *jsonString = @"{\"ID\":{\"Content\":268,\"type\":\"text\"},\"ContractTemplateID\":{\"Content\":65,\"type\":\"text\"}}"; NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
Теперь, если вы выполните следующую инструкцию NSLog
NSLog(@"%@",[json objectForKey:@"ID"]);
Результатом будет еще один NSDictionary.
{ Content = 268; type = text; }
Надеюсь, это поможет получить четкое понимание.
источник
Я думаю, вы получаете массив из ответа, поэтому вам нужно назначить ответ массиву.
источник
Используйте этот код, где str - ваша строка JSON:
NSError *err = nil; NSArray *arr = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&err]; // access the dictionaries NSMutableDictionary *dict = arr[0]; for (NSMutableDictionary *dictionary in arr) { // do something using dictionary }
источник
Swift 3:
if let jsonString = styleDictionary as? String { let objectData = jsonString.data(using: String.Encoding.utf8) do { let json = try JSONSerialization.jsonObject(with: objectData!, options: JSONSerialization.ReadingOptions.mutableContainers) print(String(describing: json)) } catch { // Handle error print(error) } }
источник
Используйте следующий код, чтобы получить объект ответа из
AFHTTPSessionManager
блока сбоя; тогда вы можете преобразовать общий тип в требуемый тип данных:id responseObject = [NSJSONSerialization JSONObjectWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] options:0 error:nil];
источник