2011-12-14 1 views
0

Я использую JSON Parsing в своем приложении. Моя проблема в том, что когда я получаю свой ответ String с сервера, я разбирал эту строку через JSON Parser и данные в моем словаре. Парсинг идет хорошо, но упорядочение не поддерживается, когда моя строка пришла, у него есть значение «Изучение китайского», но при анализе этого и получении данных в словаре тогда он не попал на первый элемент.Заказ данных, возвращаемых из json-синтаксического анализа, не такой, как строка json

Я хотел бы объяснить это с помощью моего примера кода: Строка, которую я хочу, чтобы разобрать:

NSString *respStr = [req responseString]; 
NSLog(@"respStr=%@",respStr); 


{ 
    "Learning Chinese": [ 
    { 
     "title": "Chinese nga28Traditionalnga27 Audio FlashCards for iPad", 
     "function_name": "Learning Chinese" 
    }, 
    { 
     "title": "WCC Chinese Flashcards nga28Bigramnga27 with Audio", 
     "function_name": "Learning Chinese" 
    } 
    ], 
    "Business & Office": [ 
    { 
     "title": "Instant Customer", 
     "function_name": "Business & Office" 
    }, 
    { 
     "title": "Phone Swipe nga7 Credit Card Terminal", 
     "function_name": "Business & Office" 
    } 
    ], 
    "Kids": [ 
    { 
     "title": "iWriteWords nga28Handwriting Gamenga27", 
     "function_name": "Kids" 
    }, 
    { 
     "title": "SoundBook nga25 audio flashcards for toddlers", 
     "function_name": "Kids" 
    } 
    ], 
    "Christmas": [ 
    { 
     "title": "Santanga2s Fun", 
     "function_name": "Christmas" 
    }, 
    { 
     "title": "Santerrific", 
     "function_name": "Christmas" 
    } 
    ] 
} 

Теперь

NSMutableDictionary *dict=[respStr JSONValue]; 
NSLog(@"dict=%@",dict); 

я получил:

dict={ 
    "Business & Office" =  (
       { 
      "function_name" = "Business & Office"; 
      title = "Instant Customer"; 
     }, 
       { 
      "function_name" = "Business & Office"; 
      title = "Phone Swipe nga7 Credit Card Terminal"; 
     } 
    ); 
    Christmas =  (
       { 
      "function_name" = Christmas; 
      title = "Santanga2s Fun"; 
     }, 
       { 
      "function_name" = Christmas; 
      title = Santerrific; 
     } 
    ); 
    Kids =  (
       { 
      "function_name" = Kids; 
      title = "iWriteWords nga28Handwriting Gamenga27"; 
     }, 
       { 
      "function_name" = Kids; 
      title = "SoundBook nga25 audio flashcards for toddlers"; 
     } 
    ); 
    "Learning Chinese" =  (
       { 
      "function_name" = "Learning Chinese"; 
      title = "Chinese nga28Traditionalnga27 Audio FlashCards for iPad"; 
     }, 
       { 
      "function_name" = "Learning Chinese"; 
      title = "WCC Chinese Flashcards nga28Bigramnga27 with Audio"; 
     } 
    ); 
} 

После этого :

NSLog(@"[dict allKeys]=%@",[dict allKeys]); 

[dict allKeys]=(
    Christmas, 
    Kids, 
    "Learning Chinese", 
    "Business & Office" 
) 

Из кода ясно, что в строке Learning Chinese есть первый, но в словаре он находится на 4-м номере, а при выполнении allKeys он приходит на 3 числа.

Пожалуйста, если кто-нибудь знает, почему это происходит, скажите мне или каким-либо другим способом его решения. Для меня необходимо сделать предварительный заказ. Мне нужно показать свои данные в том же порядке, что и в строке, возвращаемой с сервера.

Любые предложения будут высоко оценены.

Заранее спасибо.

+0

смотрит на меня, как ваш возвращаемые данные в настоящее время перечислены в алфавитном порядке. –

+0

Возможный дубликат [Objective-C SBJSON: порядок json-массива] (http://stackoverflow.com/questions/3758977/objective-c-sbjson-order-of-json-array) –

ответ

1

Вы должны знать, что ключи в NSDictionary/NSMutableDictionary не заказываются. Чтобы решить эту проблему, вы можете либо использовать массив, либо отсортировать его самостоятельно в своем коде.

Ваш вопрос очень похож на этот: Objective-C SBJSON: order of json array

+0

благодарит Рафаля за ваш ответ + 1 Да, я тоже видел этот вопрос, но вы не решили мою проблему. – Gypsa

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