现在主流的对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"));
}