前一段工作中总会遇到使用Java处理JSON的情况,大部分都使用的是开源工具Jackson实现的。
因此总结一下发上来,希望对看到的人有所帮助。
------------------------------------------------------------
一、入门
Jackson中有个ObjectMapper类很是实用,用于Java对象与JSON的互换。
1、Java对象转换为JSON:
User user=new User(); //Java Object
ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(user); //返回字符串
//输出格式化后的字符串(有性能损耗)
mapper.defaultPrettyPrintingWriter().writeValueAsString(user);
mapper.writeValue(new File("c:\\user.json"), user); //指定文件写入
//设置序列化配置(全局),设置序列化时不输出空值.
sharedMapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);
2、JSON反序列化为Java对象:
ObjectMapper mapper = new ObjectMapper();
//解析器支持解析单引号
mapper.configure(Feature.ALLOW_SINGLE_QUOTES,true);
//解析器支持解析结束符
mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS,true);
HashMap jsonMap = mapper.readValue(json,HashMap.class); //转换为HashMap对象
二、Jackson支持3种使用方式:
1、Data Binding:最方便使用.
(1)Full Data Binding:
private static final String MODEL_BINDING = "{\"name\":\"name1\",\"type\":1}"; public void fullDataBinding() throws Exception{ ObjectMapper mapper = new ObjectMapper(); Model user = mapper.readValue(MODEL_BINDING, Model.class);//readValue到一个实体类中. System.out.println(user.getName()); System.out.println(user.getType()); }
Model类:
private static class Model{ private String name; private int type; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getType() { return type; } public void setType(int type) { this.type = type; } }
(2)Raw Data Binding:
/** Concrete Java types that Jackson will use for simple data binding are: JSON Type Java Type object LinkedHashMap<String,Object> array ArrayList<Object> string String number(no fraction) Integer, Long or BigInteger (smallest applicable) number(fraction) Double(configurable to use BigDecimal) true|false Boolean null null */ public void rawDataBinding() throws Exception{ ObjectMapper mapper = new ObjectMapper(); HashMap map = mapper.readValue(MODEL_BINDING,HashMap.class);//readValue到一个原始数据类型. System.out.println(map.get("name")); System.out.println(map.get("type")); }
(3)generic Data Binding:
private static final String GENERIC_BINDING = "{\"key1\":{\"name\":\"name2\",\"type\":2},\"key2\":{\"name\":\"name3\",\"type\":3}}"; public void genericDataBinding() throws Exception{ ObjectMapper mapper = new ObjectMapper(); HashMap<String,Model> modelMap = mapper.readValue(GENERIC_BINDING,new TypeReference<HashMap<String,Model>>(){});//readValue到一个范型数据中. Model model = modelMap.get("key2"); System.out.println(model.getName()); System.out.println(model.getType()); }
2、Tree Model:最灵活。
private static final String TREE_MODEL_BINDING = "{\"treekey1\":\"treevalue1\",\"treekey2\":\"treevalue2\",\"children\":[{\"childkey1\":\"childkey1\"}]}"; public void treeModelBinding() throws Exception{ ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(TREE_MODEL_BINDING); //path与get作用相同,但是当找不到该节点的时候,返回missing node而不是Null. String treekey2value = rootNode.path("treekey2").getTextValue();// System.out.println("treekey2value:" + treekey2value); JsonNode childrenNode = rootNode.path("children"); String childkey1Value = childrenNode.get(0).path("childkey1").getTextValue(); System.out.println("childkey1Value:"+childkey1Value); //创建根节点 ObjectNode root = mapper.createObjectNode(); //创建子节点1 ObjectNode node1 = mapper.createObjectNode(); node1.put("nodekey1",1); node1.put("nodekey2",2); //绑定子节点1 root.put("child",node1); //数组节点 ArrayNode arrayNode = mapper.createArrayNode(); arrayNode.add(node1); arrayNode.add(1); //绑定数组节点 root.put("arraynode", arrayNode); //JSON读到树节点 JsonNode valueToTreeNode = mapper.valueToTree(TREE_MODEL_BINDING); //绑定JSON节点 root.put("valuetotreenode",valueToTreeNode); //JSON绑定到JSON节点对象 JsonNode bindJsonNode = mapper.readValue(GENERIC_BINDING, JsonNode.class);//绑定JSON到JSON节点对象. //绑定JSON节点 root.put("bindJsonNode",bindJsonNode); System.out.println(mapper.writeValueAsString(root)); }
3、Streaming API:最佳性能。
见官方文档例子。
参考资料:
1、http://wiki.fasterxml.com/JacksonInFiveMinutes Jackson官方教程示例
2、http://wiki.fasterxml.com/JacksonJavaDocs Jackson在线API文档
3、http://hjg1988.iteye.com/blog/561368 JSON工具性能比较:json-lib和jackson进行Java对象到json字符串序列化。
相关推荐
使用jackson完成json与java对象的互相转换实例
标签:fasterxml、jackson、jaxrs、json、provider、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释...
Jackson为Java对象和Json的转换提供了有效的手段,是Web开发不可缺少的工具
答:我数据库中的主键是使用雪花算法生成的,就是因为用id的位数太多,导致在前台我点击删除/修改按钮后传入到后端的id会缺少精度。(比如本应该是18234736282736、传过去就是18234736282700),可以看到后三位就...
JJSchema, 使用Jackson从Java类型到JSON模式的生成器 JJSchema一个 Java JSON模式和超模式。 目前,它基于v4草案。 支持 Java 8日期和时间 API 。最新版本<dependency> <groupId>com.github
标签:fasterxml、jackson、jaxrs、json、provider、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,...
Java中,使用jackson完成json与Java对象互转
基于java的开发源码-高性能的JSON处理 Jackson.zip 基于java的开发源码-高性能的JSON处理 Jackson.zip 基于java的开发源码-高性能的JSON处理 Jackson.zip 基于java的开发源码-高性能的JSON处理 Jackson.zip 基于java...
Java JSON Schema和Hyper-Schema生成器。 当前,它基于v4草案。 支持Java 8日期和时间API。 最新发布 < groupId>com.github.reinert</ groupId> < artifactId>jjschema < version>1.16 简单的操作方法 假设...
jackson是一款非常强大,而且便捷的java工具 , 他可以将java对象转换为json , 配合ajax使用
Java常用四大json库,包含目前最新版gson,fastjson,jackson,json-lib
标签:11、jackson_2、json4s、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
json 所需要的jackson-annotations-2.4.0.jar,jackson-core-2.4.2.jar, jackson-databind-2.4.2.jar,jackson-mapper-asl-1.9.11.jar
json格式与java类对象相互转换。json格式转换成java类对象,List,Map。类对象转换成json。
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html 相比...
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 为什么推荐Jackson呢,主要原因: 1、按性能比较,Jackson > Gson > Json-lib。Jackson的处理能力甚至高出Json-lib有...
jackson,一个Java JSON工具类库。 该压缩包提供core、annotations和databind库,每项均包含工具包、源代码和javadoc,共三个文件夹、九个jar文件。
java运行依赖jar包