Pretty-Print JSON в Java - PullRequest
       30

Pretty-Print JSON в Java

179 голосов
/ 05 ноября 2010

Я использую , и мне нужно красиво распечатать данные JSON (сделать их более читабельными).

Мне не удалось найти эту функцию в этой библиотеке. Как это обычно достигается?

Ответы [ 15 ]

5 голосов
/ 19 февраля 2014

Теперь этого можно достичь с помощью библиотеки JSONLib:

http://json -lib.sourceforge.net / apidocs / net / sf / json / JSONObject.html

Если (и только если) вы используете перегруженный метод toString(int indentationFactor), а не стандартный метод toString().

Я проверил это в следующей версии API:

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20140107</version>
</dependency>
4 голосов
/ 06 октября 2016

Вы можете использовать Gson, как показано ниже

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonString = gson.toJson(object);

Из сообщения JSON Pretty Print с использованием Gson

В качестве альтернативы, вы можете использовать Джексона, как показано ниже

ObjectMapper mapper = new ObjectMapper();
String perttyStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);

Из поста Довольно распечатать JSON на Java (Джексон)

Надеюсь, эта помощь!

4 голосов
/ 09 сентября 2015

Следуя спецификациям JSON-P 1.0 ( JSR-353 ), более современное решение для данного JsonStructure (JsonObject или JsonArray) может выглядеть следующим образом:

import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

import javax.json.Json;
import javax.json.JsonStructure;
import javax.json.JsonWriter;
import javax.json.JsonWriterFactory;
import javax.json.stream.JsonGenerator;

public class PrettyJson {

    private static JsonWriterFactory FACTORY_INSTANCE;

    public static String toString(final JsonStructure status) {

        final StringWriter stringWriter = new StringWriter();

        final JsonWriter jsonWriter = getPrettyJsonWriterFactory()
                .createWriter(stringWriter);

        jsonWriter.write(status);
        jsonWriter.close();

        return stringWriter.toString();
    }

    private static JsonWriterFactory getPrettyJsonWriterFactory() {
        if (null == FACTORY_INSTANCE) {
            final Map<String, Object> properties = new HashMap<>(1);
            properties.put(JsonGenerator.PRETTY_PRINTING, true);
            FACTORY_INSTANCE = Json.createWriterFactory(properties);
        }
        return FACTORY_INSTANCE;
    }

}
1 голос
/ 09 февраля 2018

Это сработало для меня, используя Джексона:

mapper.writerWithDefaultPrettyPrinter().writeValueAsString(JSONString)
0 голосов
/ 02 февраля 2019

Underscore-java имеет статический метод U.formatJson (json). Я поддерживаю проект. Живой пример

import com.github.underscore.lodash.U;

public class MyClass {

    public static void main(String args[]) {
        String json = "{\"Price\": {"
        + "    \"LineItems\": {"
        + "        \"LineItem\": {"
        + "            \"UnitOfMeasure\": \"EACH\", \"Quantity\": 2, \"ItemID\": \"ItemID\""
        + "        }"
        + "    },"
        + "    \"Currency\": \"USD\","
        + "    \"EnterpriseCode\": \"EnterpriseCode\""
        + "}}";
        System.out.println(U.formatJson(json)); 
    }
}

Выход:

{
   "Price": {
      "LineItems": {
         "LineItem": {
            "UnitOfMeasure": "EACH",
            "Quantity": 2,
            "ItemID": "ItemID"
         }
      },
      "Currency": "USD",
      "EnterpriseCode": "EnterpriseCode"
   }
}
...