基于Jackson的JSON数据处理详解

Jackson也被称为JSON for Java,已经成为事实上的JSON数据处理的标准实现。

Jackson提供了一组工具,用以处理JSON数据,当前最新版本为28-Mar-2018发布的2.9.5。

Jackson的标准设计思路是首先构造JsonFactory对象,然后生成JsonParser对象以读取JSON数据并转换为Java对象,或者生成JsonGenerator对象以将Java对象转换为JSON数据并写入文件等。

除此之外,Jackson的data-binding机制还提供了更灵活的ObjectMapper对象,能够方便地在JSON数据与Java对象之间进行映射。ObjectMapper对象的主要方法如下:

  • readValue(sourceData, targetClass.class)
将JSON数据映射为Java对象
  • writeValue(new File("result.json"), mySourceObject);
将Java对象转换为JSON数据写入到文件result.json
  • writeValueAsString(mySourceObject);
将Java对象转换为JSON格式的字符串

Jackson的jackson-annotations暂不在这里进行讨论。

1. 将JSON数据转换为Java对象,利用JsonParser

1) 方法一:JsonParser解析数据流(推荐)

JsonFactory factory = new JsonFactory();
JsonParser jp = jsonFactory.createJsonParser(read_source_file); // or URL, Stream, Reader, String, byte[]
if (jp.nextToken() != JsonToken.START_OBJECT) {
	throw new IOException(...);
}
while(jp.nextToken() != JsonToken.END_OBJECT){
	String fieldName = jp.getCurrentName();
	if (...){...}
	jp.nextToken();
}
jp.close();

2) 方法二:使用ObjectMapper将JSON数据构造一个完整的JsonNode树状结构,然后遍历查找

String strJsonData = IOUtils.toString(new URL(eris_url));
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(strJsonData);
JsonParser jp = node.traverse();
...

3) 方法三:使用ObjectMapper进行DataBind直接将JSON数据映射为Java POJO对象

ObjectMapper mapper = new ObjectMapper();
MyMap infoMap = mapper.readValue(strJsonContent, MyMap.class);

2. 读取Java对象生成JSON格式的数据

这往往是通过将各种Java对象转换为JsonGenerator对象而实现的。

1) Java POJO对象->JsonGenerator

JsonFactory jsonFactory = new JsonFactory();
JsonGenerator jg = jsonFactory.createJsonGenerator(new_writable_file, JsonEncoding.UTF8); // or Stream, Reader
jg.writeStartObject();
jg.writeNumberField(mySourceObject.getMyField(...));
...
jg.writeEndObject();
jg.close();

2) JSON数据流->JsonGenerator

ObjectMapper mapper = new ObjectMapper();
...
mapper.writeValue(jg, javaObject);

3) JsonNode树状结构对象->JsonGenerator

JsonNodeFactory factory = new JsonNodeFactory(false);
JsonNode nodeSource = factory.objectNode();

JsonFactory jsonFactory = new JsonFactory();
JsonGenerator jgTarget = jsonFactory.createGenerator(System.out);
		
ObjectMapper mapper = new ObjectMapper();
mapper.writeTree(jgTarget, nodeSource);


关于Jackson的初步介绍,请参考JSON及其Java处理器Gson和Jackson入门详解

参考链接:

https://github.com/FasterXML/jackson
https://github.com/FasterXML/jackson-core
https://github.com/FasterXML/jackson-databind
https://github.com/FasterXML/jackson-annotations
https://github.com/FasterXML/jackson-docs
https://github.com/FasterXML/jackson-docs/wiki/Finding-Javadoc

猜你喜欢

转载自blog.csdn.net/taiyangdao/article/details/80668416