Ini adalah string JSON yang saya miliki:
{"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}]}
Saya perlu mengubah JSON di atas String
ke dalam Pretty Print JSON Output (menggunakan Jackson), seperti di bawah ini:
{
"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
}
]
}
Adakah yang bisa memberikan saya contoh berdasarkan contoh saya di atas? Bagaimana cara mencapai skenario ini? Saya tahu ada banyak contoh, tetapi saya tidak dapat memahaminya dengan benar. Bantuan apa pun akan dihargai dengan contoh sederhana.
Diperbarui:
Di bawah ini adalah kode yang saya gunakan:
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.defaultPrettyPrintingWriter().writeValueAsString(jsonString));
Tetapi ini tidak bekerja dengan cara saya membutuhkan output seperti yang disebutkan di atas.
Inilah POJO yang saya gunakan untuk JSON di atas:
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;
}
Adakah yang bisa memberi tahu saya apakah saya mendapatkan POJO yang tepat untuk JSON atau tidak?
Diperbarui:
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));
Baris di bawah ini mencetak sesuatu seperti ini:
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"
} ]
}
itulah cara saya perlu ditampilkan. Tetapi ketika saya menambahkannya ke model seperti ini:
model.addAttribute("response", (indented));
Dan kemudian menunjukkannya di halaman jsp formform seperti di bawah ini:
<fieldset>
<legend>Response:</legend>
<strong>${response}</strong><br />
</fieldset>
Saya mendapatkan sesuatu seperti ini:
{ "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" } ] }
yang tidak saya butuhkan. Saya perlu cara itu dicetak di atas. Adakah yang bisa memberi tahu saya mengapa itu terjadi seperti ini?
sumber
Solusi paling sederhana dan juga paling ringkas (untuk v2.3.3):
sumber
Cara baru menggunakan Jackson 1.9+ adalah sebagai berikut:
Output akan diformat dengan benar!
sumber
Untuk Jackson 1.9, Kita dapat menggunakan kode berikut untuk mencetak cantik.
sumber
Saya pikir, ini adalah teknik paling sederhana untuk mempercantik data json,
di mana Respon adalah sebuah String.
Cukup lewati metode 4 (indentSpaces)
toString()
.Catatan: Ini berfungsi dengan baik di android tanpa perpustakaan. Tetapi dalam java Anda harus menggunakan pustaka org.json .
sumber
String json = new GsonBuilder().setPrettyPrinting().create().toJson(map); String indentedJson = (new JSONObject(json)).toString(4);
untuk beberapa alasan yang kedua kehilangan urutan kunciSepertinya ini mungkin jawaban untuk pertanyaan Anda . Dikatakan itu menggunakan Spring, tapi saya pikir itu masih akan membantu Anda dalam kasus Anda. Biarkan saya sebaris kode di sini sehingga lebih nyaman:
sumber
Anda dapat mencapai ini menggunakan cara-cara berikut:
1. Menggunakan Jackson dari Apache
Impor di bawah kelas:
Ketergantungan gradle adalah:
2. Menggunakan Gson dari Google
Impor di bawah kelas:
Gradle-nya adalah:
Di sini, Anda dapat mengunduh versi terbaru yang benar dari repositori.
sumber
ObjectMapper.readTree()
dapat melakukan ini dalam satu baris:sumber