2013-07-22 1 views
5

나는 json-simple을 사용하며 디버깅을 위해 예쁜 프린트를 원합니다. 여기 주문을 변경하지 않고 JSON 예쁜 프린트

매우 relavant 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- 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와 SONObjects 만 있습니다. 그래서 내가 도서관을 바꿀 생각이었습니다. '이것은 해결책이 아닙니다.'라는 말은 무슨 뜻입니까? Simple json의 원래 구현에서'HashMap'과'LinkedHashMap'을 바꾸면 문제가 해결 될 것이라고 생각했습니다. 모범 사례가 아니거나 전혀 작동하지 않는다는 것을 의미합니까? – Sait

관련 문제