将JSONstring转换为使用Jackson的漂亮打印JSON输出

这是我拥有的JSONstring,

{"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}]} 

我需要将上面的JSONstring转换为Pretty Print JSON Output(使用Jackson)

 { "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 } ] } 

任何人都可以提供我的例子上面的例子吗? 如何实现这个场景,我知道有很多的例子,但我无法正确理解这些。 任何帮助将受益于一个简单的例子。

更新:

以下是我正在使用的代码

 ObjectMapper mapper = new ObjectMapper(); System.out.println(mapper.defaultPrettyPrintingWriter().writeValueAsString(jsonString)); 

但是,这不符合我需要如上所述的输出的方式

这是我用于上述JSON的POJO,

 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; } 

任何人都可以告诉我是否得到正确的POJO的JSON或不?

更新:-

 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)); 

在下面的行打印出这样的东西 –

 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" } ] } 

这是我需要展示的方式。 但是当我把它添加到像这样的模型 –

 model.addAttribute("response", (indented)); 

然后在下面的resultform jsp页面中显示出来 –

  <fieldset> <legend>Response:</legend> <strong>${response}</strong><br /> </fieldset> 

我得到这样的东西 –

 { "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" } ] } 

我不需要 我需要上面打印的方式。 谁能告诉我为什么发生这样的事情?

要缩进任何旧的JSON,只需将其绑定为Object ,如:

 Object json = mapper.readValue(input, Object.class); 

然后用缩进来写出来:

 String indented = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json); 

这避免了你必须定义实际的POJO来映射数据。

或者你也可以使用JsonNode (JSON树)。

最简单也是最紧凑的解决scheme(适用于v2.3.3):

 ObjectMapper mapper = new ObjectMapper(); mapper.enable(SerializationFeature.INDENT_OUTPUT); 

使用jackson1.9+的新方法如下:

 Object json = OBJECT_MAPPER.readValue(diffResponseJson, Object.class); String indented = OBJECT_MAPPER.writerWithDefaultPrettyPrinter() .writeValueAsString(json); 

输出将被正确格式化!

对于jackson1.9,我们可以使用下面的代码进行漂亮的打印。

 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.enable(SerializationConfig.Feature.INDENT_OUTPUT); 

这看起来可能是你的问题的答案 。 它说它使用的是Spring,但是我认为它仍然可以帮助你。 让我在这里内联代码,这样更方便:

 import java.io.FileReader; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.ObjectWriter; public class Foo { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); MyClass myObject = mapper.readValue(new FileReader("input.json"), MyClass.class); // this is Jackson 1.x API only: ObjectWriter writer = mapper.defaultPrettyPrintingWriter(); // ***IMPORTANT!!!*** for Jackson 2.x use the line below instead of the one above: // ObjectWriter writer = mapper.writer().withDefaultPrettyPrinter(); System.out.println(writer.writeValueAsString(myObject)); } } class MyClass { String one; String[] two; MyOtherClass three; public String getOne() {return one;} void setOne(String one) {this.one = one;} public String[] getTwo() {return two;} void setTwo(String[] two) {this.two = two;} public MyOtherClass getThree() {return three;} void setThree(MyOtherClass three) {this.three = three;} } class MyOtherClass { String four; String[] five; public String getFour() {return four;} void setFour(String four) {this.four = four;} public String[] getFive() {return five;} void setFive(String[] five) {this.five = five;} } 

我想,这是美化json数据最简单的方法,

 String indented = (new JSONObject(Response)).toString(4); 

响应是一个string。

只需在toString()方法中传递4(indentSpaces) toString()

注意:它在没有任何库的android中工作正常。 但在Java中,你必须使用org.json库。