杰克逊使用:
转自:HTTP://hi.baidu.com/woodcock1017/item/53c3761099ac74071894ec99
杰克逊使用备忘
杰克逊主要使用ObjectMapper对象来进行序列化以及反序列化操作。
使用杰克逊可以毫无压力的将复杂对象进行完全序列化,也可以将各种类型的对象反序列化
以下代码均省略异常处理
普通对象
序列化Order order对象:
ObjectMapper mapper = new ObjectMapper();
Writer strWriter = new StringWriter();
mapper.writeValue(strWriter,顺序);
String json = strWriter.toString();
反序列化:
Order order = mapper.readValue(json,Order.class);
链表,地图等
序列化List <Order> orderList:
ObjectMapper mapper = new ObjectMapper();
Writer strWriter = new StringWriter();
mapper.writeValue(strWriter,orderList);
String json = strWriter.toString();
反序列化:
需要用到TypeReference
List <Order> orderList = mapper.readValue(json,new TypeReference <List <Order >>(){});
如果反序列化为名单<LinkedHashMap的<字符串,字符串>>,则直接
List orderList = mapper.readValue(json,List.class);
解析某个字段
JsonNode node = mapper.readTree(json);
String name = node.get(“name”);
GSON的使用:
转自:HTTP://www.iteye.com/topic/1131510
Gson(又称Google Gson)是Google公司发布的一个开源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串串成Java对象.GSON核心jar包不到1M,非常精简,但提供的功能无疑是非常强大的,如果使用JDK自带的JSON解析API,使用起来相对比较繁琐一点,而且代码量较多。
下面通过一个表格来了解一下,GSON目前的发展状况
初始版本 | 2008年5月22日 |
最新版本(稳定版本) | 2.8.2 / 2013年5月13日; |
编程语言 | Java的 |
操作平台 | 各种平台 |
许可协议 | Apache许可证2.0 |
官方网站 | http://code.google.com/p/google-gson/ |
下载地址 | http://code.google.com/p/google-gson/downloads/list |
GSON帮助文档 | http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html |
下图是,使用GSON转换时报的一个异常。
的Java代码
- 线程“main”中的异常 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期的BEGIN_OBJECT,但是BEGIN_ARRAY在第 1 行第2 列
- 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:176 )
- 在com.google.gson.Gson.fromJson(Gson.java:803 )
- 在com.google.gson.Gson.fromJson(Gson.java:768 )
- 在com.google.gson.Gson.fromJson(Gson.java:717 )
- 在com.google.gson.Gson.fromJson(Gson.java:689 )
- 在com.demoone.UseGson.testOneBeanFromJSON(UseGson.java:54 )
- 在com.demoone.UseGson.main(UseGson.java:89 )
- 引起:java.lang.IllegalStateException:预期的BEGIN_OBJECT,但是BEGIN_ARRAY在第 1 行第2 列 //注意这句话跟数组集合有关
- 在com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374 )
- 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:165 )
- ... 6 更多
下面贴出,笔者的测试源码,注意上述异常,在代码的注释中已经指出问题原因
的Java代码
- package com.demoone;
- import java.util.ArrayList;
- import java.util.List;
- 进口 com.entity.Person;
- import com.google.gson.Gson;
- import com.google.gson.reflect。*;
- / ***
- *
- *使用gson
- *进行序列化,反序列化的操作
- * json
- *
- * ** /
- 公共类 UseGson {
- 静态 Gson g = new Gson();
- / **
- *
- *由集合类型的实体类
- *转换成Json类型
- *
- * ** /
- public static void testToJSON(){
- List <Person> list = new ArrayList <>();
- for (int i = 0 ; i < 2 ; i ++){
- Person p = new Person(i, “散仙” + i, “北京市” + i, “54152541@qq.com” , 500.0 );
- list.add(P);
- }
- 字符串json = g.toJson(list);
- 的System.out.println(JSON);
- }
- / **
- *由json转换为实体类
- *
- * * /
- public static void testOneBeanFromJSON(){
- / **
- *转换一个Java Bean的时候
- *记住不能使用[],只有在使用集合的时候才可以使用
- *如上图贴的那个异常就是由此原因造成的,另外
- *格式要规范,中间不能出现空格字符
- *
- * ** /
- String jsonBean = “[{\”id \“:0,\”name \“:\”散仙0 \“,\”地址\“:\”北京市0 \“,\”email \“:\” 54152541@qq.com \“,\”money \“:500.0}]” ;
- 人员P = g.fromJson(jsonBean,人。类);
- 的System.out.println(P);
- }
- / **
- *由json转换为实体类集合
- *
- * * /
- public static void testListBeanFromJSON(){
- / **
- *转换一个集合的实体Bean
- *注意前面加上[]方括号,代表一个数组
- * ** /
- String jsonBeanList = “[{\”id \“:0,\”name \“:\”散仙0 \“,\”地址\“:\”北京市0 \“,\”email \“:\” 54152541@qq.com \ “\ ”钱\“:500.0},{\ ”ID \“:1,\ ”名称\“:\ ”散仙1 \“,\ ”地址\“:\”北京市1 \“,\”email \“:\”54152541@qq.com \“,\”money \“:500.0}]” ;
- List <Person> lists = g.fromJson(jsonBeanList,new TypeToken <List <Person >>(){}。getType());
- System.out.println(“反序列之后” );
- for (Person pp:lists){
- 的System.out.println(PP);
- }
- }
- public static void main(String [] args){
- testListBeanFromJSON(); //测试集合反序列化
- testOneBeanFromJSON(); //测试单个实体类反序列化
- // testToJSON(); //测试序列化
- }
- }
运行结果:
的Java代码
- testListBeanFromJSON()方法:
- 反序列之后
- 编号:0 名字:散仙0 地址:北京市0 电子邮件:54152541 @qq .com钱:500.0
- 编号:1 名字:散仙1 地址:北京市1 电子邮件:54152541 @qq .com钱:500.0
- testOneBeanFromJSON()方法:
- 编号:0 名字:散仙0 地址:北京市0 电子邮件:54152541 @qq .com钱:500.0
实体类人:
的Java代码
- 包 comcomity;
- / **
- *实体类
- *
- *
- * ** /
- public class Person {
- private int id;
- 私人 字符串名称;
- 私人 字符串地址;
- 私人 String电子邮件;
- 私人双 钱;
- @覆盖
- public String toString(){
- // TODO自动生成的方法存根
- 返回“编号:” + id + “名字:” + name + “地址:” + address + “电子邮件:” + email + “钱:” + money;
- }
- public Person(){
- // TODO自动生成的构造函数存根
- }
- 公共 人(int id,字符串名称,字符串地址,字符串电子邮件,
- 双 钱){
- super ();
- 这个.id = id;
- 这个.name = name;
- 这个.address = address;
- 这.email =电子邮件;
- 这个.money =钱;
- }
- public int getId(){
- 返回 ID;
- }
- public void setId(int id){
- 这个.id = id;
- }
- public String getName(){
- 返回 名称;
- }
- public void setName(String name){
- 这个.name = name;
- }
- public String getAddress(){
- 返回 地址;
- }
- public void setAddress(String address){
- 这个.address = address;
- }
- public String getEmail(){
- 回复 邮件;
- }
- public void setEmail(String email){
- 这.email =电子邮件;
- }
- public double getMoney(){
- 回报 金钱;
- }
- public void setMoney(double money){
- 这个.money =钱;
- }
- }
转载: