Đây là chuỗi JSON tôi có:
{"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}]}
Tôi cần chuyển đổi JSON ở trên String
thành Đầu ra JSON khá đẹp (sử dụng Jackson), như dưới đây:
{
"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
}
]
}
Bất cứ ai có thể cung cấp cho tôi một ví dụ dựa trên ví dụ của tôi ở trên? Làm thế nào để đạt được kịch bản này? Tôi biết có rất nhiều ví dụ, nhưng tôi không thể hiểu chúng đúng. Bất kỳ trợ giúp sẽ được đánh giá cao với một ví dụ đơn giản.
Cập nhật:
Dưới đây là mã tôi đang sử dụng:
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.defaultPrettyPrintingWriter().writeValueAsString(jsonString));
Nhưng điều này không hoạt động với cách tôi cần đầu ra như đã đề cập ở trên.
Đây là POJO tôi đang sử dụng cho JSON ở trên:
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;
}
Ai đó có thể cho tôi biết liệu tôi đã nhận được POJO đúng cho JSON hay không?
Cập nhật:
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));
Dòng dưới đây in ra một cái gì đó như thế này:
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"
} ]
}
đó là cách tôi cần được thể hiện Nhưng khi tôi thêm nó vào mô hình như thế này:
model.addAttribute("response", (indented));
Và sau đó hiển thị nó trong một trang jsp dạng kết quả như dưới đây:
<fieldset>
<legend>Response:</legend>
<strong>${response}</strong><br />
</fieldset>
Tôi nhận được một cái gì đó như thế này:
{ "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ái mà tôi không cần Tôi cần cách nó được in ra ở trên. Bất cứ ai có thể cho tôi biết tại sao nó xảy ra theo cách này?