2013-07-22 38 views
5

我使用json-simple,並希望有用於調試的漂亮打印。JSON漂亮的印刷品,不改變訂單

這裏是一個非常初步認識SO問題:Pretty-Print JSON in Java

然而,在給定的線程的答案,而不是隻修復縮進,但使用字符串命令也改變了項目的順序爲[A ... Z]的鑰匙。

有什麼辦法可以修改縮進而不改變我的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-啓用傑克遜到漂亮打印渲染/ 6541956#6541956 –

+0

@ carl-lopez傑克遜與Gson有什麼關係? –

+0

可以用你想象得到的代替 –

回答

0

No. JSONObjectHashMap,沒有訂單維護您的put條目。

7

org.json.simple.JSONObject class extends java.util.HashMap這就是你在輸出中看到這個屬性順序的原因。 setPrettyPrinting()方法不會更改順序。你可以從源代碼中刪除它,並且沒有任何改變。如果您想保留訂單,您可以使用java.util.LinkedHashMap而不是org.json.simple.JSONObject

簡單的例子:

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

我的源代碼沒有什麼奇特的。其他JSONObjects中只有許多JJSONArray和SONObjects。這就是爲什麼我正在考慮改變圖書館。你的意思是說'這不是解決辦法'。我認爲在'simple-json'的原始實現中將'HashMap'更改爲'LinkedHashMap'可以解決這個問題。你的意思是說這不是一種最佳做法,或者你的意思是說它根本就不起作用? – Sait