[java] Java로 된 Pretty-Print JSON

나는 사용하고있다 JSON 데이터를 예쁘게 인쇄해야합니다 (더 인간이 읽을 수 있도록).

해당 라이브러리에서이 기능을 찾을 수 없습니다. 이것이 일반적으로 어떻게 달성됩니까?



답변

GSON 은이를 좋은 방법으로 수행 할 수 있습니다.

Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(uglyJSONString);
String prettyJsonString = gson.toJson(je);


답변

org.json 내장 메소드를 사용 하여 데이터를 예쁘게 인쇄했습니다.

JSONObject json = new JSONObject(jsonString); // Convert text to object
System.out.println(json.toString(4)); // Print it with specified indentation

JSON의 필드 순서는 정의마다 무작위입니다. 특정 순서는 파서 구현에 따라 다릅니다.


답변

GSON 이 이것을 지원하는 것처럼 보이지만 사용중인 라이브러리에서 전환 하려는지 모르겠습니다.

사용 설명서에서 :

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson.toJson(someObject);


답변

잭슨 ( com.fasterxml.jackson.databind)으로 :

ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObject))

보낸 사람 : 예쁜 인쇄 JSON 출력을 활성화하는 방법 (Jackson)

나는 이것이 이미 답변에 있음을 알고 있지만, 여기에 별도로 작성하고 싶습니다. 기회가 이미 잭슨을 가지고 있기 때문에 여분의 코드 줄이 필요할 것입니다.


답변

JSON 처리 (JSR-353) 구현에 Java API를 사용하는 경우을 JsonGenerator.PRETTY_PRINTING작성할 때 특성을 지정할 수 있습니다 JsonGeneratorFactory.

다음 예제는 원래 블로그 게시물에 게시되었습니다 .

import java.util.*;
import javax.json.Json;
import javax.json.stream.*;

Map<String, Object> properties = new HashMap<String, Object>(1);
properties.put(JsonGenerator.PRETTY_PRINTING, true);
JsonGeneratorFactory jgf = Json.createGeneratorFactory(properties);
JsonGenerator jg = jgf.createGenerator(System.out);

jg.writeStartObject()                    // {
    .write("name", "Jane Doe")           //    "name":"Jane Doe",
    .writeStartObject("address")         //    "address":{
        .write("type", 1)                //        "type":1,
        .write("street", "1 A Street")   //        "street":"1 A Street",
        .writeNull("city")               //        "city":null,
        .write("verified", false)        //        "verified":false
    .writeEnd()                          //    },
    .writeStartArray("phone-numbers")    //    "phone-numbers":[
        .writeStartObject()              //        {
            .write("number", "555-1111") //            "number":"555-1111",
            .write("extension", "123")   //            "extension":"123"
        .writeEnd()                      //        },
        .writeStartObject()              //        {
            .write("number", "555-2222") //            "number":"555-2222",
            .writeNull("extension")      //            "extension":null
        .writeEnd()                      //        }
    .writeEnd()                          //    ]
.writeEnd()                              // }
.close();


답변

내 상황은 내 프로젝트가 예쁜 인쇄를 지원하지 않는 기존 (JSR이 아닌) JSON 파서를 사용한다는 것입니다. 그러나 꽤 인쇄 된 JSON 샘플을 만들어야했습니다. Java 7 이상을 사용하는 한 추가 라이브러리를 추가하지 않고도 가능합니다.

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine scriptEngine = manager.getEngineByName("JavaScript");
scriptEngine.put("jsonString", jsonStringNoWhitespace);
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)");
String prettyPrintedJson = (String) scriptEngine.get("result");


답변

한 줄에 GSON을 사용 하여 인쇄하기 :

System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(new JsonParser().parse(jsonString)));

인라인 외에도 허용되는 답변 과 같습니다 .