2014-10-04 2 views
0

Я немного новичок в Objective-c. Я пытаюсь проанализировать данные json, которые выглядят так, как в одном массиве.взять Json NSDictionary в строки - Цель C

[{"id":"3672","name":"TestName","color":"red","cost":456","date":"0000-00-00 00:00:00"}] 

ниже Objective C часть кода

FullUrl=[NSString stringWithFormat:@"http://mywebsite.com?user=%@",uservalue]; 
NSString *absoluteURl=[NSString string]; 
absoluteURl=[self URLEncodeString:FullUrl]; 

NSURL *url=[[NSURL alloc]initWithString:absoluteURl]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

NSData *data = [NSURLConnection sendSynchronousRequest:request 
             returningResponse:nil error:nil]; 

NSData *jsonData = [data dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *parseJson = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil] 

Теперь я хотел бы знать, как я могу взять каждый ключ в строку из parseJson?. например, я хочу имя значение в «Stringname» и т.д.,

Когда я поставил точку останова на строке NSDictionary * parseJson = и взять curser над parseJson это показывает, как

<__NSCFArray 0x1dddb670>(
{ 
    name = "TestName"; 
    id = 3672; 
    color = red; 
    cost = "456"; 
    date = "0000-00-00 00:00:00"; 
} 
) 

Так это значит, разбор JSON отлично работает в моем коде? Почему заказ не является правильным при сравнении с порядком товаров json webservice.

ответ

3

Ваш объект JSON представляет собой массив словарей. Словари являются неупорядоченные наборы пар имя/значение, поэтому они не будут оставаться обязательно в том же порядке, как они инициированную в


Так Предположим, что ваш ответ так:.

data:[{"id":"3672","name":"TestName","color":"red","cost":456","date":"0000-00-00 00:00:00"}] 

Попробуй как это:

NSArray* dataArr = [parseJson objectForKey:@"data"]; 

for(NSDictionary *obj in dataArr){ 

NSString* Stringname = [obj objectForKey:@"name"]; 
NSString* Stringid = [obj objectForKey:@"id"]; 
NSString* Stringcolor = [obj objectForKey:@"color"]; 
NSString* Stringcost = [obj objectForKey:@"cost"]; 
NSString* Stringdate = [obj objectForKey:@"date"]; 
} 
+0

Спасибо, я понял. –

1

Объект JSON является неупорядоченным набором пар имя/значение, поэтому он не останется в том же порядке, что и инициализирован.

использование

NSString* Stringname = [parseJson objectForKey:@"name"]; 

для доступа к элементам словаря

+0

Я не редактировал: P Я сказал в комментарии, что это не сработает, потому что parseJson - это массив –

+0

Да, правильно, objectForKey специфичен для NSDictionary, и Xcode показывает, что это не для NSArray. –

1

Порядок не то же самое, потому что вы элементы отображаются в NSDictionary, который является неупорядоченный сбор.

И да, разбор json возвращает правильный результат.

1

Да это работает прекрасно,
Элементы в формате JSON может иметь порядок,
, но элементы NSDictionary не упорядочены.

Поэтому, когда строка JSON преобразуется в NSDictionary,
заказ перетасовывается.

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