Json转换利器Gson之实例

简介:

描述

     Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来

示例

import java.lang.reflect.Type;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;


public class GSonDemo {
	public static void main(String[] args) {
//		Gson gson = new Gson();
		//设置将类型的属性进行格式转换
		Gson gson = new GsonBuilder().registerTypeAdapter(Timestamp.classnew TimestampTypeAdapter()).setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		List<Person> persons = new ArrayList<Person>();
		for (int i = 0; i < 10; i++) {
		     Person p = new Person();
		     p.setName("name" + i);
		     p.setAge(i * 5);
		     p.setInsertTime(new Timestamp(System.currentTimeMillis()));
		     persons.add(p);
		}
		String str = gson.toJson(persons);
		System.out.println(str);
		
		List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
		for(int i = 0; i < ps.size() ; i++)
		{
		     Person p = ps.get(i);
		     System.out.println(p.toString());
		}
		
		System.out.println(new Timestamp(System.currentTimeMillis()));
	}
}

class Person {
	private String name;
	private int age;
	private Timestamp insertTime;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Timestamp getInsertTime() {
		return insertTime;
	}

	public void setInsertTime(Timestamp insertTime) {
		this.insertTime = insertTime;
	}

	@Override
	public String toString() {
		return name + "\t" + age + "\t" + insertTime;
	}
}

//实现序列化,反序列化接口
class TimestampTypeAdapter implements JsonSerializer<Timestamp>, JsonDeserializer<Timestamp{
    public JsonElement serialize(Timestamp src, Type arg1, JsonSerializationContext arg2) {
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS");
        String dateFormatAsString = format.format(new Date(src.getTime()));
        return new JsonPrimitive(dateFormatAsString);
    }

    public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        if (!(json instanceof JsonPrimitive)) {
            throw new JsonParseException("The date should be a string value");
        }

        try {
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS");
            Date date = (Date) format.parse(json.getAsString());
            return new Timestamp(date.getTime());
        } catch (Exception e) {
            throw new JsonParseException(e);
        }
    }

}

参考

http://my.oschina.net/sunglasscat/blog/336590

http://www.cnblogs.com/chenlhuaf/archive/2011/05/01/gson_test.html

http://my.oschina.net/itblog/blog/204120

目录
相关文章
|
6月前
|
数据采集 JSON API
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
|
JSON Java 数据格式
Json和对象之间转换的封装(Gson)
前段时间由于做spring boot的后端,经常需要进行Json 和对象之间的转换,所以利用Gson结合Kotlin扩展函数的特性封装了两个非常方便的函数,如果是其他语言,也可以封装一下,就是没Kotlin方便了。下面展示一下最终封装效果
212 0
Json和对象之间转换的封装(Gson)
|
存储 JSON 数据格式
Pandas处理JSON文件to_json()一文详解+实例代码
Pandas处理JSON文件to_json()一文详解+实例代码
1021 0
Pandas处理JSON文件to_json()一文详解+实例代码
|
4月前
|
JSON 数据格式
gson自定义Type解析json数组字符串
gson自定义Type解析json数组字符串
|
4月前
|
XML JSON Android开发
[Android]使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换
[Android]使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换
54 0
|
6月前
|
JSON 数据格式
Gson转换json数据为HashMap时long类型变为double问题解决
今天再使用Gson处理json数据的时候碰到了一个问题 , 当我使用如下代码解析json数据的时候 , requestTime就变为了double类型
123 0
|
7月前
|
存储 JSON 自然语言处理
【ODPS新品发布第2期】实时数仓Hologres:推出计算组实例/支持JSON数据/向量计算+大模型等新能力
本期将重点介绍Hologres推出计算组实例,Hologres支持JSON数据 ,Hologres向量计算+大模型能力,Hologres数据同步新能力,Hologres数据分层存储
|
8月前
|
JSON Java Maven
GSON的用法(处理对象和JSON的相互转化)
GSON的用法(处理对象和JSON的相互转化)
147 0
|
11月前
|
JSON 数据格式
Json解析问题—数组用Gson反序列化为List双引号消失
现在的目的是这样的,我想从一串Object类型的字符串,转化成对应的实体类对象。 简单来说就是把这个字符串给一个个独立分开。 我先写出实体类对象和Json的数据,看完再开始解析。
104 0
|
11月前
|
JSON JavaScript 数据格式
Vue前后台数据交互实例演示,使用axios传递json字符串、数组
Vue前后台数据交互实例演示,使用axios传递json字符串、数组
446 0