2011-08-13 2 views
22

JSON文字列のサーバーからの応答が非常に大きいです。 JSONオブジェクトに変換してキーを取得し、それを繰り返します。JsonObjectのキーが反復されるとき、サーバーからの応答と同じ順序ではない

問題は、サーバーからの応答と同じ順序で反復しない場合です。

次は、List<String>のすべてのキーを追加してソートし、それのイテレータを取得しても、それがまだ必要ではない(応答のように)別の方法を適用します。

コード例はここにある:

JSONObject jsonObject = new JSONObject(responseString); 
    Iterator<String> myIter = jsonObject.keys(); 


    List<String> sortKey = new ArrayList<String>(); 

    while(myIter.hasNext()){ 
     sortKey.add(myIter.next()); 
    } 
    Collections.sort(sortKey); 

答えて

18

JSONオブジェクトのキーの順序は意味のあるものになっていません。特定の順序が必要な場合は、オブジェクトではなく配列を使用する必要があります。

Javaコードは、キーをアルファベット順にソートします。オブジェクト内のキーの最初の順序を取得する方法はありません。

Reference 1

キーの順序は

Reference 2未定義である:オブジェクトは、名前/値のペアの順序なし集合である

+0

ありがとうございましたが、今すぐ次の質問をご覧ください。 http://stackoverflow.com/questions/7053915/how-to-parse-a-jsonobject-using-jsonarray-that-have-dynamic-ids-in-start-as-inte – mastermind

+3

正直言って私は思っていませんこの答えは100%です。たとえば、通貨交換の場合は、{name - > info}のペアにすることができます。名前は "重要"で並べ替えることができます。すなわち、USDは1番目です。もちろん、これらのparisを配列エントリに入れたり、しかし、追加の巣があるだけです。私の指摘は、「ディクショナリ」オブジェクト内の項目の順序が意味をなされることが多い理由が多いことです。それがjson仕様の一部でない場合、仕様は間違っています。人々はデータ構造を可能な限りクリーンかつシンプルに保つことを望んでいません。 –

+0

@ superarts.org:JavaScriptオブジェクト*のキーを注文する必要があるかどうかは問題ではありません。質問は、JavaScriptオブジェクト*のキーが順序付けされているかどうかです。そして彼らはそうではありません。 –

17

あなたは使うことができますキーと値を配置するソートマップ。アルファベット順1024+ウェブサイトのリストを表示し、私のAndroidアプリセクションに取り組んでいる間、私はこの同じような問題に出くわしたこの

public static List listFromJsonSorted(JSONObject json) { 
    if (json == null) return null; 
    SortedMap map = new TreeMap(); 
    Iterator i = json.keys(); 
    while (i.hasNext()) { 
     try { 
      String key = i.next().toString(); 
      JSONObject j = json.getJSONObject(key); 
      map.put(key, j); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    return new LinkedList(map.values()); 
} 
0

ような何か。 jsonのトラバーサルはソートされた順序ではなかったので、私はちょうどテーブルにトラバーサル中のjson値を挿入しました(私は私のアプリでリストアダプタを使用しています)、カーソル付きのウェブサイトのソートされたリストを取得しました。

サーバーからフェッチしているものを保存する場合は、データベースにクエリを実行して、必要な順序で値を並べ替えることができます。

+0

はい、最初に気がついたことは、あなたが言ったことですが、間違いなく時間がかかるでしょうが、私はjsonとjava関数をソートするために探しています –

関連する問題