FastJson、Gson对json解析详解

现在主流的对json解析比较流行的主要是ali的FastJson和google的Gson

一、FastJson

git地址:fastjson

maven:fastjson

主要的类是:

JSON

JSONObject:fastjson提供的json对象

JSONArray:fastjson提供的json数组对象

序列化

User user = new User();
user.setName("xl");
user.setAddr("hangzhou");

Role role = new Role();
role.setMemo("all");
role.setRoleName("admin");

user.setRole(role);

例1.将javaBean转json

String userStr = com.alibaba.fastjson.JSONObject.toJSONString(user);
System.out.println("user:"+userStr);
user:{"addr":"hangzhou","name":"xl","role":{"memo":"all","roleName":"admin"}}

例2.将map转json

Map<String,Object> map = new HashMap<String,Object>();
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
String mapStr = com.alibaba.fastjson.JSONObject.toJSONString(map);
System.out.println("mapStr:"+mapStr);
mapStr:{"a":"1","b":"2","c":"3"}

例3.将List<javaBean>转json

List<User> users = new ArrayList<User>();
users.add(user);
users.add(user);
String userListStr = JSONObject.toJSONString(users);
System.out.println("userListStr:"+userListStr);
userListStr:[{"addr":"hangzhou","name":"xl","role":{"memo":"all","roleName":"admin"}},
{"$ref":"$[0]"}]

这里可以设置格式化显示:

List<User> users = new ArrayList<User>();
users.add(user);
users.add(user);
String userListStr = JSONArray.toJSONString(users,true);
System.out.println("userListStr:"+userListStr);
userListStr:[
	{
		"addr":"hangzhou",
		"name":"xl",
		"role":{
			"memo":"all",
			"roleName":"admin"
		}
	},
	{"$ref":"$[0]"}
]

例4.将List<Map>转json

List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>();
mapList.add(map);
mapList.add(map);
String mapListStr = com.alibaba.fastjson.JSONObject.toJSONString(mapList);
System.out.println("mapListStr:"+mapListStr);
mapListStr:[{"a":"1","b":"2","c":"3"},{"$ref":"$[0]"}]

反序列化

例5.将json转javaBean

String userJsonStr = "{\"addr\":\"hangzhou\",\"name\":\"xl\",
\"role\":{\"memo\":\"all\",\"roleName\":\"admin\"}}";

User userTmp = JSONObject.parseObject(userJsonStr,User.class);
System.out.println(userTmp.toString());

例6.将json转map

String mapStr = "{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"}";
Map<String,Object> map = JSONObject.parseObject(mapStr);
System.out.println("mapStr:"+map.get("a"));
System.out.println("mapStr:"+map.get("b"));
System.out.println("mapStr:"+map.get("c"));
mapStr:1
mapStr:2
mapStr:3

例7.将json转List<javaBean>

String jsonArrs = "[{\"addr\":\"hangzhou\",\"name\":\"xl\",
\"role\":{\"memo\":\"all\",\"roleName\":\"admin\"}},
{\"addr\":\"hangzhou\",\"name\":\"xl\",
\"role\":{\"memo\":\"all\",\"roleName\":\"admin\"}}]";
List<User> userJsons = JSONArray.parseArray(jsonArrs,User.class);

System.out.println("[userJsons]:"+userJsons);

采用TypeReference

String jsonArrs = "[{\"addr\":\"hangzhou\",\"name\":\"xl\",
\"role\":{\"memo\":\"all\",\"roleName\":\"admin\"}},
{\"addr\":\"hangzhou\",\"name\":\"xl\",
\"role\":{\"memo\":\"all\",\"roleName\":\"admin\"}}]";
List<User> userJsons = JSONArray.parseArray(jsonArrs,User.class);
System.out.println("[userJsons]:"+userJsons);

List<User> userList = JSONArray.parseObject(jsonArrs, 
new com.alibaba.fastjson.TypeReference<ArrayList<User>>(){});
System.out.println("[userJsons]:"+userList);

例8.将json转List<Map>

String mapStr = "[{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"},{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"}]";
List<Map> maps = JSON.parseArray(mapStr,Map.class);
for(Map map : maps){
	System.out.println("mapStr:"+map.get("a"));
	System.out.println("mapStr:"+map.get("b"));
	System.out.println("mapStr:"+map.get("c"));
}

二、Gson

git地址:gson

maven:gson

主要类:

Gson

序列化

例1.将javabean转json

User user = new User();

user.setName("xl");
user.setAddr("hangzhou");
Role role = new Role();
role.setMemo("all");
role.setRoleName("admin");
user.setRole(role);

Gson gson = new Gson();

String userStr = gson.toJson(user);
System.out.println(userStr);
{"name":"xl","addr":"hangzhou","role":{"roleName":"admin","memo":"all"}}

例2.将List<javaBean>转json

List<User> users = new ArrayList<User>();
users.add(user);
users.add(user);
users.add(user);

String usersStr = gson.toJson(users);
System.out.println(usersStr);
[{"name":"xl","addr":"hangzhou","role":{"roleName":"admin","memo":"all"}},
{"name":"xl","addr":"hangzhou","role":{"roleName":"admin","memo":"all"}},
{"name":"xl","addr":"hangzhou","role":{"roleName":"admin","memo":"all"}}]

例3.将map转json

Map<String,String> map = new HashMap<String,String>();
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");

String mapStr = gson.toJson(map);
System.out.println(mapStr);
{"a":"1","b":"2","c":"3"}

例4.将List<Map>转json

List<Map<String,String>> maps = new ArrayList<Map<String,String>>();
maps.add(map);
maps.add(map);
System.out.println(gson.toJson(maps));
[{"a":"1","b":"2","c":"3"},{"a":"1","b":"2","c":"3"}]

反序列化

例5.将json转javaBean

String objStr = "{\"name\":\"xl\",\"addr\":\"hangzhou\",
    \"role\":{\"roleName\":\"admin\",\"memo\":\"all\"}}";
java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<User>(){}.getType();

User u = gson.fromJson(objStr, type);
System.out.println(u.getAddr());
System.out.println(u.getName());

例6.将json转List<javaBean>

String objStr = "[{\"name\":\"xl\",\"addr\":\"hangzhou\",
\"role\":{\"roleName\":\"admin\",\"memo\":\"all\"}},
{\"name\":\"xl\",\"addr\":\"hangzhou\",
\"role\":{\"roleName\":\"admin\",\"memo\":\"all\"}}]";
java.lang.reflect.Type type = 
        new com.google.gson.reflect.TypeToken<ArrayList<User>>(){}.getType();

List<User> list = gson.fromJson(objStr, type);
for(User u : list){
	System.out.println(u.getAddr());
	System.out.println(u.getName());
}

例7.将json转map

String mapGson = "{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"}";
java.lang.reflect.Type mapType = 
new com.google.gson.reflect.TypeToken<Map<String,String>>(){}.getType(); 

Map<String,String> mapGsonStr = gson.fromJson(mapGson, mapType);
System.out.println(mapGsonStr.get("a"));
System.out.println(mapGsonStr.get("b"));
System.out.println(mapGsonStr.get("c"));

例8.将json转List<Map>

String mapListGson = "[{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"},"
		+ "{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"}]";
// 借助于java.lang.reflect.Type
java.lang.reflect.Type mapListType = 
    new com.google.gson.reflect.TypeToken<List<Map<String,String>>>(){}.getType(); 
List<Map<String,String>> mapGsonStr = gson.fromJson(mapListGson, mapListType);
for(Map<String,String> map : mapGsonStr){
	System.out.println(map.get("a"));
	System.out.println(map.get("b"));
	System.out.println(map.get("c"));
}

猜你喜欢

转载自blog.csdn.net/u014209205/article/details/81988430