2011-12-14 4 views
0

私のアプリケーションでJSON構文解析を使用しています。 私の問題は、サーバーから自分のレスポンス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のキーは注文されていないことがわかります。これを解決するには、配列を使用するか、コード内で自分で並べ替えることができます。

あなたの質問は、この1と非常によく似ています。あなたの返されたデータは、アルファベット順にリストされているよう Objective-C SBJSON: order of json array

+0

あなたの答えは+ 1私はその質問をあなたが紹介したのを見ましたが、私の問題を解決しませんでした。 – Gypsa

関連する問題