2013-07-22 10 views
5

私はjson-simpleを使用しており、デバッグのためにきれいなプリントをしたいと考えています。特定のスレッドで答えが、インデントを修正するだけでなく、文字列の順序を使用して[... Z]の項目の順序を変更するだけでなく、しかしPretty-Print JSON in Java注文を変更せずにJSONをきれいに印刷

:ここ

は非常にrelavant SO質問ですキーの

私のJSONObjectの項目の順序を変更せずに字下げを修正する方法はありますか?

例:

JSONObject myJSon = new JSONObject(); 
myJSon.put("zzz", 1); 
myJSon.put("aaa", 1); 

Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
System.out.println(gson.toJson(myJSon)); 

出力:

{ 
    "aaa": 1, 
    "zzz": 1 
} 

所望の出力:

{ 
    "zzz": 1, 
    "aaa": 1 
} 

編集:私が使用している:org.json.simple.JSONObject

+0

これはあなたを助けることができるかどうかを参照してください。http://stackoverflow.com/questions/6541757/when-using-spring-mvc-for-rest-how-do-you- enable-jackson-to-pretty-print-render/6541956#6541956 –

+0

@ carl-lopezジャクソンとGsonとの関係は何ですか? –

+0

あなたが考えることができるように置き換えることができます –

答えて

0

No. JSONObjectHashMapです。putへのエントリのオーダーはありません。

7

org.json.simple.JSONObjectクラスがjava.util.HashMapに拡張されているため、出力時にこのプロパティの順序が表示されるのはこのためです。 setPrettyPrinting()メソッドは、順序を変更しません。ソースコードから削除することはできますが、何も変更されません。ご注文をご希望の場合は、org.json.simple.JSONObjectの代わりにjava.util.LinkedHashMapをご利用ください。

簡単な例:

import java.util.LinkedHashMap; 
import java.util.Map; 

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 

public class GsonProgram { 

    public static void main(String[] args) throws Exception { 
     Map<String, Integer> myJSon = new LinkedHashMap<String, Integer>(); 
     myJSon.put("zzz", 1); 
     myJSon.put("aaa", 1); 

     Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
     System.out.println(gson.toJson(myJSon)); 
    } 
} 
+0

私は問題がありますMavenを使ってsimple-jsonのソースコードをダウンロードして編集します。それ以上の読書? – Sait

+0

なぜライブラリを変更したいですか?これは解決策ではありません。なぜソースコードを変更したくないのですか?実際のソースコードを表示できますか? –

+0

私のソースコードは何も空想的ではありません。他のJSONObjectの中にある多くのJJSONArraysとSONObjectのみ。それが私が図書館を変更することを検討していた理由です。 「これは解決策ではありません。私は 'simple-json'の元の実装で' HashMap'から 'LinkedHashMap'への変更が問題を解決するだろうと考えました。それがベストプラクティスではないということを意味しているのですか、それとも全く動かないということですか? – Sait

関連する問題