`

Jackson学习三之使用Tree Model读取以及更新JSON

阅读更多

依然是使用ObjectMapper,可以以类似读取DOM的方式读取JSON,请看例子:

package com.jingshou.jackson;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import org.apache.commons.io.IOUtils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonTest4 {

	public static void main(String[] args) throws MalformedURLException, IOException {
		String url = "http://m.weather.com.cn/data/101210101.html";
		String json = IOUtils.toString(new URL(url));
		System.out.println(json);
		
		// Get rootNode and weather node;
		ObjectMapper m = new ObjectMapper();
		JsonNode rootNode = m.readTree(json);
		JsonNode weaNode = rootNode.get("weatherinfo");
		System.out.println(weaNode);
		System.out.println(weaNode.get("city"));
		
		System.out.println("***************************************");
		
		// Use Iterator to traverse to tree
		Iterator<String> keys = weaNode.fieldNames();	
		while(keys.hasNext()){
			String fieldName = keys.next();
			System.out.println(fieldName + ": " + weaNode.get(fieldName).textValue());
		}	

	}

}

 运行结果:

{"weatherinfo":{"city":"杭州","city_en":"hangzhou","date_y":"2014年1月12日","date":"","week":"星期日","fchh":"11","cityid":"101210101"......}
"杭州"
***************************************
city: 杭州
city_en: hangzhou
date_y: 2014年1月12日
date: 
week: 星期日
fchh: 11
cityid: 101210101
temp1: 5℃~0℃
temp2: 5℃~0℃
temp3: 6℃~-2℃
........

 

以下是新建以及更新Tree Model的例子:

package com.jingshou.jackson;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class JacksonTest5 {

	public static void main(String[] args) throws JsonProcessingException {
		ObjectMapper mapper = new ObjectMapper();
		JsonNode rootNode = mapper.createObjectNode(); // will be of type ObjectNode
		((ObjectNode) rootNode).put("name", "jingshou");
		((ObjectNode) rootNode).put("id", 523);
		((ObjectNode) rootNode).put("age", 30);	
		System.out.println(rootNode);
		
		String json = mapper.writeValueAsString(rootNode);
		System.out.println(json);
		((ObjectNode) rootNode).remove("id");
		System.out.println(rootNode);

	}

}

 运行结果:

{"name":"jingshou","id":523,"age":30}
{"name":"jingshou","id":523,"age":30}
{"name":"jingshou","age":30}

 

参考文章:

本文出自"lijingshou"博客,转载请务必保留此出处http://lijingshou.iteye.com/blog/2003112

分享到:
评论

相关推荐

    com.fasterxml.jackson

    使用Tree Model,通过JsonNode处理单个Json节点 使用databind模块,直接对Java对象进行序列化和反序列化 通常来说,我们在日常开发中使用的是第3种方式,有时为了简便也会使用第2种方式,比如你要从一个很大的Json...

    jackson-jar

    目前维护的产品使用jackson处理json,现整理一下jackson相关资料,希望对初次接触jackson的新手有所帮助。 jackson主页: http://jackson.codehaus.org/ jackson document: ...

    使用Jackson来实现Java对象与JSON的相互转换的教程

    Jackson库支持的数据绑定方式包括Data Binding、Streaming API以及Tree Model。 ### 知识点二:如何使用Jackson进行Java对象与JSON的转换 #### 1. ObjectMapper类 在Jackson库中,`ObjectMapper`类是进行JSON数据...

    官网jackson快速指导

    - **功能强大**:它是最强大的处理方式之一,能够以离散事件的形式读取和写入 JSON 内容。 - **低开销**:具有最低的开销,并提供最快的数据读写操作速度。 - **类比于 Stax 解析器**:类似于 XML 中的 Stax 解析...

    高性能的JSON处理 Jackson源码

    首先,Jackson的核心设计理念是通过流式处理(Streaming API)和树模型(Tree Model)提供高效的数据序列化和反序列化。流式API允许逐个处理JSON元素,降低了内存消耗,适合处理大型数据。而树模型则提供了更灵活的...

    jackson jar包

    5. **性能优化**:Jackson提供了多种性能优化选项,如启用树模型(Tree Model)模式、禁用特定的特性来减少内存占用,或者使用`@JsonInclude(JsonInclude.Include.NON_NULL)`来排除null值。 6. **模块扩展**:...

    jckson依赖包

    Jackson提供了从JSON文本读取数据的能力,如通过`ObjectMapper.readValue()`方法,可以将JSON字符串解析为Java对象,或者从输入流中读取JSON数据。 4. **注解(Annotations)**:Jackson提供了多种注解,如`@...

    jackson的jar包.zip_Java编程_Java_

    它支持多种序列化模式,如`tree model`(将JSON解析为`JsonNode`树)、`POJO (Plain Old Java Object)`模型以及`streaming API`。反序列化时,Jackson可以自动处理复杂的继承关系,支持泛型,以及自定义类型转换。 ...

    解析

    对于JSON,Jackson和Gson是Java中常用的解析库,它们可以将JSON字符串转化为Java对象,反之亦然。 除了基本的解析,Java还涉及更复杂的解析技术,如编译时元编程(Compile-Time Meta-programming)和反射。例如,...

Global site tag (gtag.js) - Google Analytics