Voici la chaîne JSON que j'ai:
{"attributes":[{"nm":"ACCOUNT","lv":[{"v":{"Id":null,"State":null},"vt":"java.util.Map","cn":1}],"vt":"java.util.Map","status":"SUCCESS","lmd":13585},{"nm":"PROFILE","lv":[{"v":{"Party":null,"Ads":null},"vt":"java.util.Map","cn":2}],"vt":"java.util.Map","status":"SUCCESS","lmd":41962}]}
Je dois convertir le JSON ci-dessus String
en sortie JSON Pretty Print (en utilisant Jackson), comme ci-dessous:
{
"attributes": [
{
"nm": "ACCOUNT",
"lv": [
{
"v": {
"Id": null,
"State": null
},
"vt": "java.util.Map",
"cn": 1
}
],
"vt": "java.util.Map",
"status": "SUCCESS",
"lmd": 13585
},
{
"nm": "PROFILE
"lv": [
{
"v": {
"Party": null,
"Ads": null
},
"vt": "java.util.Map",
"cn": 2
}
],
"vt": "java.util.Map",
"status": "SUCCESS",
"lmd": 41962
}
]
}
Quelqu'un peut-il me donner un exemple basé sur mon exemple ci-dessus? Comment réaliser ce scénario? Je sais qu'il existe de nombreux exemples, mais je ne suis pas en mesure de les comprendre correctement. Toute aide sera appréciée avec un exemple simple.
Actualisé:
Voici le code que j'utilise:
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.defaultPrettyPrintingWriter().writeValueAsString(jsonString));
Mais cela ne fonctionne pas avec la façon dont j'avais besoin de la sortie comme mentionné ci-dessus.
Voici le POJO que j'utilise pour le JSON ci-dessus:
public class UrlInfo implements Serializable {
private List<Attributes> attribute;
}
class Attributes {
private String nm;
private List<ValueList> lv;
private String vt;
private String status;
private String lmd;
}
class ValueList {
private String vt;
private String cn;
private List<String> v;
}
Quelqu'un peut-il me dire si j'ai le bon POJO pour le JSON ou non?
Actualisé:
String result = restTemplate.getForObject(url.toString(), String.class);
ObjectMapper mapper = new ObjectMapper();
Object json = mapper.readValue(result, Object.class);
String indented = mapper.defaultPrettyPrintingWriter().writeValueAsString(json);
System.out.println(indented);//This print statement show correct way I need
model.addAttribute("response", (indented));
La ligne ci-dessous imprime quelque chose comme ceci:
System.out.println(indented);
{
"attributes" : [ {
"nm" : "ACCOUNT",
"error" : "null SYS00019CancellationException in CoreImpl fetchAttributes\n java.util.concurrent.CancellationException\n\tat java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:231)\n\tat java.util.concurrent.FutureTask.",
"status" : "ERROR"
} ]
}
c'est la manière dont j'avais besoin d'être montré. Mais quand je l'ajoute au modèle comme ceci:
model.addAttribute("response", (indented));
Et puis le montre dans une page jsp resultform comme ci-dessous:
<fieldset>
<legend>Response:</legend>
<strong>${response}</strong><br />
</fieldset>
J'obtiens quelque chose comme ça:
{ "attributes" : [ { "nm" : "ACCOUNT", "error" : "null
SYS00019CancellationException in CoreImpl fetchAttributes\n
java.util.concurrent.CancellationException\n\tat
java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:231)\n\tat
java.util.concurrent.FutureTask.", "status" : "ERROR" } ] }
dont je n'ai pas besoin. J'avais besoin de la façon dont il a été imprimé ci-dessus. Quelqu'un peut-il me dire pourquoi c'est arrivé de cette façon?
la source
La solution la plus simple et aussi la plus compacte (pour v2.3.3):
la source
La nouvelle façon d'utiliser Jackson 1.9+ est la suivante:
La sortie sera correctement formatée!
la source
Pour Jackson 1.9, nous pouvons utiliser le code suivant pour une jolie impression.
la source
Je pense que c'est la technique la plus simple pour embellir les données json,
où Response est une chaîne.
Passez simplement les 4 (indentSpaces) dans la
toString()
méthode.Remarque: cela fonctionne correctement dans Android sans aucune bibliothèque. Mais en java, vous devez utiliser la bibliothèque org.json .
la source
String json = new GsonBuilder().setPrettyPrinting().create().toJson(map); String indentedJson = (new JSONObject(json)).toString(4);
pour une raison quelconque, le second perd l'ordre des clésCela semble être la réponse à votre question . Il dit qu'il utilise Spring, mais je pense que cela devrait toujours vous aider dans votre cas. Laissez-moi insérer le code ici pour que ce soit plus pratique:
la source
Vous pouvez y parvenir en utilisant les méthodes ci-dessous:
1. Utilisation de Jackson depuis Apache
Importer la classe ci-dessous:
Sa dépendance gradle est:
2. Utilisation de Gson de Google
Importer la classe ci-dessous:
C'est gradle est:
Ici, vous pouvez télécharger la version mise à jour correcte à partir du référentiel.
la source
ObjectMapper.readTree()
peut le faire en une seule ligne:la source