依然是使用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}
参考文章:
- http://www.studytrails.com/java/json/java-jackson-json-tree-parsing.jsp
- http://www.cowtowncoder.com/blog/archives/2011/08/entry_460.html
- http://wiki.fasterxml.com/JacksonTreeModel
本文出自"lijingshou"博客,转载请务必保留此出处http://lijingshou.iteye.com/blog/2003112
相关推荐
使用Tree Model,通过JsonNode处理单个Json节点 使用databind模块,直接对Java对象进行序列化和反序列化 通常来说,我们在日常开发中使用的是第3种方式,有时为了简便也会使用第2种方式,比如你要从一个很大的Json...
目前维护的产品使用jackson处理json,现整理一下jackson相关资料,希望对初次接触jackson的新手有所帮助。 jackson主页: http://jackson.codehaus.org/ jackson document: ...
Jackson库支持的数据绑定方式包括Data Binding、Streaming API以及Tree Model。 ### 知识点二:如何使用Jackson进行Java对象与JSON的转换 #### 1. ObjectMapper类 在Jackson库中,`ObjectMapper`类是进行JSON数据...
- **功能强大**:它是最强大的处理方式之一,能够以离散事件的形式读取和写入 JSON 内容。 - **低开销**:具有最低的开销,并提供最快的数据读写操作速度。 - **类比于 Stax 解析器**:类似于 XML 中的 Stax 解析...
首先,Jackson的核心设计理念是通过流式处理(Streaming API)和树模型(Tree Model)提供高效的数据序列化和反序列化。流式API允许逐个处理JSON元素,降低了内存消耗,适合处理大型数据。而树模型则提供了更灵活的...
5. **性能优化**:Jackson提供了多种性能优化选项,如启用树模型(Tree Model)模式、禁用特定的特性来减少内存占用,或者使用`@JsonInclude(JsonInclude.Include.NON_NULL)`来排除null值。 6. **模块扩展**:...
Jackson提供了从JSON文本读取数据的能力,如通过`ObjectMapper.readValue()`方法,可以将JSON字符串解析为Java对象,或者从输入流中读取JSON数据。 4. **注解(Annotations)**:Jackson提供了多种注解,如`@...
它支持多种序列化模式,如`tree model`(将JSON解析为`JsonNode`树)、`POJO (Plain Old Java Object)`模型以及`streaming API`。反序列化时,Jackson可以自动处理复杂的继承关系,支持泛型,以及自定义类型转换。 ...
对于JSON,Jackson和Gson是Java中常用的解析库,它们可以将JSON字符串转化为Java对象,反之亦然。 除了基本的解析,Java还涉及更复杂的解析技术,如编译时元编程(Compile-Time Meta-programming)和反射。例如,...