web-dev-qa-db-fra.com

Comment imprimer de façon jolie les données JSON existantes avec Java?

J'ai une chaîne JSON compacte, et je veux bien la formater en Java sans avoir à la désérialiser d'abord - par exemple, tout comme jsonlint.org le fait. Sont Y a-t-il des bibliothèques qui fournissent cela?

Une solution similaire pour XML serait également agréable.

47
neu242

Je pense que pour une jolie impression, il est très utile de connaître sa structure.

Pour obtenir la structure, vous devez analyser la. Pour cette raison, je ne pense pas que cela soit beaucoup plus facile que d'analyser d'abord la chaîne JSON que vous avez, puis d'utiliser la jolie méthode d'impression toString mentionnée dans les commentaires ci-dessus.

Bien sûr, vous pouvez faire de même avec n'importe quelle bibliothèque JSON que vous aimez.

4
Waldheinz
int spacesToIndentEachLevel = 2;
new JSONObject(jsonString).toString(spacesToIndentEachLevel);

En utilisant org.json.JSONObject (intégré à JavaEE et Android)

68
Heath Borders

En une seule ligne:

String niceFormattedJson = JsonWriter.formatJson(jsonString)

ou

System.out.println(JsonWriter.formatJson(jsonString.toString()));

Le libray json-io ( https://github.com/jdereg/json-io ) est une petite bibliothèque (75K) sans autres dépendances que le JDK.

En plus de la jolie impression JSON, vous pouvez sérialiser Java objets (ensemble Java graphiques d'objets avec cycles) en JSON, ainsi que les lire).

10
John DeRegnaucourt

Utilisez gson. https://www.mkyong.com/Java/how-to-enable-pretty-print-json-output-gson/

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(my_bean);

sortie

{
  "name": "mkyong",
  "age": 35,
  "position": "Founder",
  "salary": 10000,
  "skills": [
    "Java",
    "python",
    "Shell"
  ]
}
8
susemi99

Si vous utilisez jackson, vous pouvez facilement y parvenir en configurant un SerializationFeature dans votre ObjectMapper:

com.fasterxml.jackson.databind.ObjectMapper mapper = new ObjectMapper();

mapper.configure(SerializationFeature.INDENT_OUTPUT, true);

mapper.writeValueAsString(<yourObject>);

C'est ça.

6
Lars Rückemann

Une autre façon d'utiliser gson:

String json_String_to_print = ...
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
return gson.toJson(jp.parse(json_String_to_print));

Il peut être utilisé lorsque vous n'avez pas le bean comme dans le post de susemi99.

3
vcycyv

J'ai trouvé une solution très simple:

<dependency>
    <groupId>com.cedarsoftware</groupId>
    <artifactId>json-io</artifactId>
    <version>4.5.0</version>
</dependency>

Code Java:

import com.cedarsoftware.util.io.JsonWriter;
//...
String jsonString = "json_string_plain_text";
System.out.println(JsonWriter.formatJson(jsonString));
1
Do Nhu Vy

La bibliothèque Underscore-Java a les méthodes U.formatJson(json) et U.formatXml(xml). Je suis le responsable du projet.

0
Valentyn Kolesnikov