Преобразование NSString в NSDictionary/JSON
У меня есть следующие данные, сохраненные как 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
.
Может кто-нибудь предположить, в чем проблема?
Ответы
Ответ 1
Я считаю, что вы неправильно интерпретируете формат 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;
}
Надеюсь, что это поможет получить ясное понимание.
Ответ 2
Я думаю, вы получаете массив от ответа, поэтому вам нужно назначить ответ массиву.
NSError *err = nil;
NSArray *array = [NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&err];
NSDictionary *dictionary = [array objectAtIndex:0];
NSString *test = [dictionary objectForKey:@"ID"];
NSLog(@"Test is %@",test);
Ответ 3
Используйте этот код, где 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
}
Ответ 4
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)
}
}
Ответ 5
Используйте приведенный ниже код, чтобы получить объект ответа из блока сбоя AFHTTPSessionManager, затем вы можете преобразовать общий тип в требуемый тип данных
id responseObject = [NSJSONSerialization JSONObjectWithData: (NSData *) error.userInfo [AFNetworkingOperationFailingURLResponseDataErrorKey]: 0 error: nil];