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一下