Jackson和Gson的使用
来源:互联网 发布:揭秘网络棋牌骗局 编辑:程序博客网 时间:2024/05/22 03:32
JackSON使用:
转自:http://hi.baidu.com/woodcock1017/item/53c3761099ac74071894ec99
Jackson使用备忘
Jackson主要使用ObjectMapper对象来进行序列化以及反序列化操作。
使用Jackson可以毫无压力的将复杂对象进行完全序列化,也可以将各种类型的对象反序列化
以下代码均省略异常处理
普通对象
序列化Order order对象:
ObjectMapper mapper = new ObjectMapper();
Writer strWriter = new StringWriter();
mapper.writeValue(strWriter, order);
String json = strWriter.toString();
反序列化:
Order order = mapper.readValue(json, Order.class);
链表、Map等
序列化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>>() {});
如果反序列化为List<LinkedHashMap<String,String>>,则直接
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目前的发展状况
下图是,使用GSON转换时报的一个异常。
- Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
- at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
- at com.google.gson.Gson.fromJson(Gson.java:803)
- at com.google.gson.Gson.fromJson(Gson.java:768)
- at com.google.gson.Gson.fromJson(Gson.java:717)
- at com.google.gson.Gson.fromJson(Gson.java:689)
- at com.demoone.UseGson.testOneBeanFromJSON(UseGson.java:54)
- at com.demoone.UseGson.main(UseGson.java:89)
- Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 //注意这句话跟数组集合有关
- at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374)
- at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165)
- ... 6 more
下面贴出,笔者的测试源码,注意上述异常,在代码的注释中已经指出问题原因
- package com.demoone;
- import java.util.ArrayList;
- import java.util.List;
- import com.entity.Person;
- import com.google.gson.Gson;
- import com.google.gson.reflect.*;
- /***
- *
- * 使用gson
- * 进行序列化,反序列化的操作
- * json
- *
- * **/
- public class UseGson {
- static 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);
- }
- String json=g.toJson(list);
- System.out.println(json);
- }
- /**
- * 由json转换为实体类
- *
- * */
- public static void testOneBeanFromJSON(){
- /**
- * 转换一个Java Bean的时候
- * 记住不能使用[],只有在使用集合的时候才可以使用
- * 如上图贴的那个异常就是由此原因造成的,另外
- * 格式要规范,中间不能出现空格字符
- *
- * **/
- String jsonBean="[{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0}]";
- Person p=g.fromJson(jsonBean, Person.class);
- System.out.println(p);
- }
- /**
- * 由json转换为实体类集合
- *
- * */
- public static void testListBeanFromJSON(){
- /**
- * 转换一个集合 的实体Bean
- * 注意前面加上[]方括号,代表一个数组
- * **/
- String jsonBeanList="[{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0},{\"id\":1,\"name\":\"散仙1\",\"address\":\"北京市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();//测试序列化
- }
- }
运行结果:
- testListBeanFromJSON() 方法:
- 反序列之后
- 编号:0 名字:散仙0 地址:北京市0 E-mail:54152541@qq.com 钱:500.0
- 编号:1 名字:散仙1 地址:北京市1 E-mail:54152541@qq.com 钱:500.0
- testOneBeanFromJSON() 方法:
- 编号:0 名字:散仙0 地址:北京市0 E-mail:54152541@qq.com 钱:500.0
实体类Person:
- package com.entity;
- /**
- * 实体类
- *
- *
- * **/
- public class Person {
- private int id;
- private String name;
- private String address;
- private String email;
- private double money;
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- return "编号:"+id+" 名字:"+name+" 地址:"+address+" E-mail:"+email+" 钱:"+money;
- }
- public Person() {
- // TODO Auto-generated constructor stub
- }
- public Person(int id, String name, String address, String email,
- double money) {
- super();
- this.id = id;
- this.name = name;
- this.address = address;
- this.email = email;
- this.money = money;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public double getMoney() {
- return money;
- }
- public void setMoney(double money) {
- this.money = money;
- }
- }
- Jackson和Gson的使用
- Jackson和Gson的使用
- Gson、Jackson和FastJSON
- android:json解析的两个工具:Gson和Jackson的使用小例子
- android中json解析的两个工具:Gson和Jackson的使用小demo
- android:json解析的两个工具:Gson和Jackson的使用小例子
- android:json解析的两个工具:Gson和Jackson的使用小例子
- FastJson Jackson Gson使用教程
- FastJSON、Jackson和Gson用法
- 【Android开源】Gson和Jackson的简单比较
- FastJson和Jackson的使用
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- nohup 后台运行,以及重定向标准输出和标准错误 &/dev/null 文件
- wget设置代理
- linux 进程的前后台切换及进程的暂停终止bg,fg,nohup
- 白盒测试实战——NITIAN Word
- C#泛型编程
- Jackson和Gson的使用
- Search a 2D Matrix
- 二维几何模板-与圆有关的计算 _long double 版
- jquery操作select(取值,设置选中)
- UVa 10674 Tangents 求两圆公切线
- Java那些事:泛型
- hdu 1023 Train Problem II_出栈方法数_卡特兰数
- SQL Syntax - more about SQL
- SQL中DateTime转换成Varchar样式