将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库。
- 无法将java.util.ArrayList的实例反序列化为VALUE_STRING
- jackson – 具有双向关系的实体序列化(避免循环)
- 从jackson2.2的ObjectMapper漂亮打印JSON
- 如何使用Jackson JSON将JSONstring转换为Map <String,String>
- 如何在使用基于Spring注解的configuration时configurationMappingJacksonHttpMessageConverter?
- 序列化与jackson的枚举
- 我怎么能告诉jackson忽略一个属性,我无法控制源代码?
- jackson与JSON:无法识别的领域,没有标记为可忽略的
- Java 8 LocalDate Jackson格式