2013-07-22 10 views
5

Używam json-simple i chcę mieć ładny wydruk do celów debugowania.JSON pretty-print bez zmiany zamówienia

Tutaj jest bardzo obowiązujących, odnośnych SO pytanie: Pretty-Print JSON in Java

Jednak odpowiedź w danym wątku, nie tylko rozwiązuje wcięcie ale zmienia także kolejność elementów na [A ... Z] stosując kolejność ciąg kluczy.

Czy istnieje sposób naprawienia wcięcia bez zmiany kolejności elementów w moim JSONObject?

Przykład:

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

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

wyjściowa:

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

Pożądany wyjściowa:

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

Edycja: używam: org.json.simple.JSONObject

+0

sprawdzić, czy to może pomóc: 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 Co ma wspólnego z Jacksonem w przypadku Jacksona? –

+0

Można zastąpić, jak mogłoby się wydawać, –

Odpowiedz

0

No. JSONObject to HashMap, nie ma w nim żadnego porządku w odniesieniu do wpisów, które do niego należysz put.

7

org.json.simple.JSONObject klasa rozszerza java.util.HashMap i to jest powód, dla którego widzisz tę kolejność właściwości na wyjściu. Metoda setPrettyPrinting() nie zmienia kolejności. Możesz go usunąć z kodu źródłowego i nic się nie zmieni. Jeśli chcesz zachować zamówienie, możesz użyć numeru java.util.LinkedHashMap zamiast org.json.simple.JSONObject.

Prosty przykład:

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

Mam problemy aby pobrać i edytować kody źródłowe simple-json przy użyciu Maven. Jakieś dalsze czytanie? – Sait

+0

Dlaczego chcesz zmienić bibliotekę? To nie jest rozwiązanie. Dlaczego nie chcesz zmieniać swojego kodu źródłowego? Czy możesz pokazać nam swój prawdziwy kod źródłowy? –

+0

Mój kod źródłowy nie ma nic nadzwyczajnego. Tylko wiele JJSONArrays i SONObjects wewnątrz innych JSONObjects. Właśnie dlatego rozważałem zmianę biblioteki. Co masz na myśli mówiąc "To nie jest rozwiązanie". Myślałem, że zmiana 'HashMap' na' LinkedHashMap' w oryginalnej implementacji 'simple-json' rozwiąże problem. Czy masz na myśli, że nie jest to najlepsza praktyka, czy masz na myśli, że w ogóle nie działa? – Sait

Powiązane problemy