工具-----用Gson的Json字符串

Json一种非常常用的数据交换方式,易于人阅读和编写。同时也易于机器解析和生成。

JSON 与 对象的关系:其实,可以这么理解:JSON 是 对象的字符串表示法,它使用文本表示一个对象的信息,本质是一个字符串。

比如:

var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的。

var json = '{"a": "Hello", "b": "World"}'//这是一个 JSON 字符串,本质是一个字符串。

在学习java服务器客户机的长连接或者短连接时,需要进行信息的交互,而json可以作为传递的一个体。

比如给出以下这个例子:

package com.smy.mis.model;

public class StudentInfo {
	private String name;
	private String password;
	private boolean status;
	
	public StudentInfo() {
	}

	public StudentInfo(String name, String password, boolean status) {
		this.name = name;
		this.password = password;
		this.status = status;
	}

	public String getName() {
		return name;
	}

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

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public boolean isStatus() {
		return status;
	}

	public void setStatus(boolean status) {
		this.status = status;
	}
}

此时给出对象转为Json字符串,以及将json字符串转为对象的例子。

但是当我们要转换的字符串是泛型类型的呢?比如一个Map<K,V>

我们可以看出通过这个并不能完全的将map转化回去,相当于map里面的StudentInfo的泛型类型在进入jvm之前被擦除了。

那我们可以通过在一开始设置它的泛型类型Type,把它准备好。new TypeToken<Map<String, StudentInfo>>() {}.getType();

这样我们就可以完整的还原了,此时我们可以将整合成工具来处理map

package com.mec.util;

import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

public class ArgumentMaker {
	public static final Gson gson = new GsonBuilder().create();
//设置我们提前准备好要将map转化出去的map
	private static final Type type = new TypeToken<Map<String, String>>() {}.getType();    
//这个map用来存储
	private Map<String, String> paraMap;
	
	public ArgumentMaker() {
		paraMap = new HashMap<String, String>();
	}
	
//通过Type将mapJson字符串转化成map
	public ArgumentMaker(String str) {
		paraMap = gson.fromJson(str, type);
	}
	
//往map里面加元素
	public ArgumentMaker addArg(String name, Object value) {
		paraMap.put(name, gson.toJson(value));
		
		return this;
	}
	
//通过具体type来的到具体对象
	@SuppressWarnings("unchecked")
	public <T> T getValue(String name, Type type) {
		String valueString = paraMap.get(name);
		if (valueString == null) {
			return null;
		}
		
		return (T) gson.fromJson(valueString, type);
	}

//通过class类来的到具体对象
	@SuppressWarnings("unchecked")
	public <T> T getValue(String name, Class<?> type) {
		String valueString = paraMap.get(name);
		if (valueString == null) {
			return null;
		}
		
		return (T) gson.fromJson(valueString, type);
	}
	
//将map直接转化为Json字符串。
	@Override
	public String toString() {
		return gson.toJson(paraMap);
	}
	
}

我们可以Test一下

猜你喜欢

转载自blog.csdn.net/baidu_41922630/article/details/102765191
今日推荐