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.
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.
int spacesToIndentEachLevel = 2;
new JSONObject(jsonString).toString(spacesToIndentEachLevel);
En utilisant org.json.JSONObject
(intégré à JavaEE et Android)
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).
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"
]
}
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.
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.
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));
La bibliothèque Underscore-Java a les méthodes U.formatJson(json)
et U.formatXml(xml)
. Je suis le responsable du projet.