3

私のサービス パッケージでは、linkedHashMap を返し、コントローラーで JSON に変換します。次に例を示します。

JSONObject jsonObject = new JSONObject();
jsonObject.put("dataObject", JSONObject.fromObject(linkedHashMap));
return jsonObject.toString();

linkedHashMap を JSON に変換すると順序が混乱するのはなぜですか?

4

2 に答える 2

0

JSON オブジェクト内の要素の順序付けはできません。

http://www.json.org/の JSON 仕様から

オブジェクトは、名前と値のペアの順序付けられていないセットです

于 2013-10-09T07:14:13.437 に答える
0

json-libを使用していると思います。json-libjava.util.HashMapは、マップ値を格納するために内部的に実装されています。したがって、最初に LinkedHashMap があったとしても、jsonObject でputそれを使用すると、順序が失われます。

順序が重要な場合は、ArrayList を使用することをお勧めします。または、順序付け情報を持つキーにマップ エントリをバインドすることもできます。

編集: マキシムが指摘しているように、JSON 仕様は明らかに順序付けられたマップを必要としません。java.util.HashMapは、順序付きの代替手段と比較して多くのパフォーマンス上の利点を提供するため、順序が問題にならない場合により頻繁に使用されます。

JavaDocsが言うように:

このクラスは、マップの順序を保証しません。特に、順序が長期的に一定であることを保証するものではありません。

于 2013-10-09T07:44:43.057 に答える