sto usando json-simple e ho bisogno di dati JSON pretty-print (renderlo più leggibile).Pretty-Print JSON in Java
non sono stato in grado di trovare questa funzionalità all'interno di tale libreria. Come si ottiene comunemente questo?
sto usando json-simple e ho bisogno di dati JSON pretty-print (renderlo più leggibile).Pretty-Print JSON in Java
non sono stato in grado di trovare questa funzionalità all'interno di tale libreria. Come si ottiene comunemente questo?
GSON può fare questo in modo piacevole:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(uglyJSONString);
String prettyJsonString = gson.toJson(je);
Sembra che lo sia GSON, anche se non so se si desidera passare dalla libreria che si sta utilizzando.
Dal manuale d'uso:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson.toJson(someObject);
Il problema con GSON, è complicato, json-simple è molto più semplice. – mabuzer
Non ho visto questo problema tra più di un anno, ma se sei disposto a modificare un po 'il codice sorgente, http://code.google.com/p/json-simple/issues/detail?id= 22 ha alcune informazioni su come migliorare json-simple con pretty-printing. – BuffaloBuffalo
Ottenuto solo una stringa senza una bella formattazione di stampa :( – Cherry
ho usato org.json metodi built-in a pretty-stampa i dati.
JSONObject json = new JSONObject(jsonString); // Convert text to object
System.out.println(json.toString(4)); // Print it with specified indentation
L'ordine dei campi in JSON è casuale per definizione. Un ordine specifico è soggetto all'implementazione del parser.
Preferisco anche questa soluzione, perché non è necessario importare dipendenze aggiuntive come suggeriscono altre risposte. – gdrt
In JSONLib è possibile utilizzare questo:
String jsonTxt = JSONUtils.valueToString(json, 8, 4);
Dal Javadoc:
stampa graziosa con GSON in una sola riga:
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(new JsonParser().parse(jsonString)));
Oltre inline, questo è equivalente a the accepted answer.
Se si utilizza un'API Java per l'implementazione JSON Processing (JSR-353), è possibile specificare la proprietà JsonGenerator.PRETTY_PRINTING
quando si crea un JsonGeneratorFactory
.
L'esempio che segue è stato originariamente pubblicato sul mio blog post.
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();
Ora questo può essere realizzato con la libreria JSONLib:
http://json-lib.sourceforge.net/apidocs/net/sf/json/JSONObject.html
Se (e solo se) si utilizza il toString(int indentationFactor)
metodo di overload e non il metodo standard toString()
.
Ho verificato questo sul seguente versione delle API:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
Sebbene questa libreria possa aiutare a rispondere alla domanda, sarebbe meglio includere un _esempio_ di come sia applicabile al problema con qualche _esplanation_ riguardo a come funziona. –
Ok, grazie per il feedback. Sebbene si ricordi, le persone come me sono volontari e non vengono pagati per fornire un servizio che garantisca il rispetto degli standard di qualità. Abbiamo un tempo limitato perché siamo spesso nel bel mezzo del lavoro o in famiglia. Ecco perché "edit" è disponibile per i lettori, quindi possiamo rendere più utili i post degli altri. –
In una linea:
String niceFormattedJson = JsonWriter.formatJson(jsonString)
Il libray json-io (https://github.com/jdereg/json-io) è un piccolo (75K) biblioteca nessun'altra dipendenza dal JDK.
Oltre a JSON di bella stampa, è possibile serializzare oggetti Java (interi grafici di oggetti Java con cicli) su JSON, nonché leggerli in.
La mia situazione è il mio progetto utilizza un parser JSON legacy (non JSR) che non supporta la stampa carina. Tuttavia, avevo bisogno di produrre campioni JSON abbastanza stampati; questo è possibile senza dover aggiungere alcun librerie extra fino a quando si sta utilizzando Java 7 e superiori:
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");
Questo è stupendo, usa il motore js per farlo, molto più semplice – med116
Seguendo le JSON-P 1.0 spec (JSR-353) una soluzione più corrente per un dato JsonStructure
(JsonObject
o JsonArray
) potrebbe apparire come segue:
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;
}
}
È possibile utilizzare GSON come qui di seguito
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonString = gson.toJson(object);
Da t egli inviare JSON pretty print using Gson
In alternativa, è possibile utilizzare Jackson come qui di seguito
ObjectMapper mapper = new ObjectMapper();
String perttyStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
Dal posto di Pretty print JSON in Java (Jackson)
Spero che questo aiuto!
con Jackson (com.fasterxml.jackson.core
):
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObject))
Da: How to enable pretty print JSON output (Jackson)
So che questo è già nelle risposte, ma voglio scrivere separatamente qui perché le probabilità sono, si dispone già di Jackson come una dipendenza e quindi tutto quello che sarà necessario sarebbe una riga aggiuntiva di codice
Questo ha funzionato per me, utilizzando Jackson:
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(JSONString)
Bene ho incluso il codice per analizzare una stringa in un JsonElement, di solito lo hai già dal lavoro precedente che fai con i dati JSON. –
Poiché questa risposta mi ha aiutato.Ho aggiunto il codice qui sotto per ridurre questa affermazione a un numero inferiore di righe se questo è quello che stai cercando public String prettifyJson (String json) { JsonElement jsonElement = new JsonParser(). Parse (json); return new GsonBuilder(). SetPrettyPrinting(). Create(). ToJson (jsonElement); } – ahmad
È possibile rispondere alla domanda dell'OP senza bisogno di librerie aggiuntive, come puoi semplicemente accedere al parser JSON incorporato in Rhino (JDK 1.7 e versioni successive). Non penso sia desiderabile aggiungere una libreria ad un progetto solo per formattare un output di debug. 'scriptEngine.eval (" risultato = JSON.stringify (JSON.parse (jsonString), null, 2) ");' – Agnes