1 Json与List之间的相互转换
1.1 谷歌的Gson.jar
//list转换为json
Gson gson = new Gson();
List<Person> persons = new ArrayList<Person>();
String str = gson.toJson(persons);
//json转换为list
Gson gson = new Gson();
List<Person> persons = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
1.2 阿里的fastJson.jar
//list转换为json
List<CustPhone> list = new ArrayList<CustPhone>();
String str=JSON.toJSON(list).toString();
//json转换为list
List<Person> list = new ArrayList<Person>();
list = JSONArray.parseArray(jsonArray, Person.class);
2 对象pojo与Json的相互转换
public class JsonUtil {
/**
* JSON 转 POJO
*/
public static <T> T getObject(String pojo, Class<T> tclass) {
try {
return JSONObject.parseObject(pojo, tclass);
} catch (Exception e) {
log.error(tclass + "转 JSON 失败");
}
return null;
}
/**
* POJO 转 JSON
*/
public static <T> String getJson(T tResponse){
String pojo = JSONObject.toJSONString(tResponse);
return pojo;
}
}
3 JSONArray与JSONObject的区别
3.1 JSONObject和JSONArray的数据表示形式
JSONObject的数据是用 { } 来表示的,
例如: { “id” : “123”, “age” : “12”, “name” : “小明”, “time” : 2020-06-06}
JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , … , { } ] 来表示
例如: [ { “id” : “123”, “age” : “12”, “name” : “小王” } , { “id” : ''321", “age” : ''12",“name”:“小刘” } ]
可以看到一个很明显的区别,一个用的是 { } ,一个最外面用的是 [ ] ;JsonArray包含多个JsonObject
3.2 JSONObject和Json字符串之间的相互转换
//JSONObject转json字符串
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "yyy");
jsonObject.put("age", 25);
jsonObject.put("sex", "男");
jsonObject.put("school", "天津大学");
String jsonStr = JSONObject.toJSONString(jsonObject);
System.out.println(jsonStr);
执行结果:
{"school":"天津大学","sex":"男","name":"yyy","age":25}
//json字符串转JSONObject
String jsonStr = "{\"school\":\"天津大学\",\"sex\":\"男\",\"name\":\"yyy\",\"age\":25}";
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
System.out.println(jsonObject.getString("name"));
System.out.println(jsonObject.getInteger("age"));
执行结果:
yyy
25
4 JSON字符串自动转换
public class JsonToMapTest01{
public static void main(String[] args){
String str = "{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}";
//第一种方式
Map maps = (Map)JSON.parse(str);
System.out.println("这个是用JSON类来解析JSON字符串")
for (Object map : maps.entrySet()){
System.out.println(((Map.Entry)map).getKey()+" " + ((Map.Entry)map).getValue());
}
//第二种方式
Map mapTypes = JSON.parseObject(str);
System.out.println("这个是用JSON类的parseObject来解析JSON字符串!!!");
for (Object obj : mapTypes.keySet()){
System.out.println("key为:"+obj+"值为:"+mapTypes.get(obj));
}
//第三种方式
Map mapType = JSON.parseObject(str,Map.class);
System.out.println("这个是用JSON类,指定解析类型,来解析JSON字符串!!!");
for (Object obj : mapType.keySet()){
System.out.println("key为:"+obj+"值为:"+mapType.get(obj));
}
//第四种方式
/**
* JSONObject是Map接口的一个实现类
*/
Map json = (Map) JSONObject.parse(str);
System.out.println("这个是用JSONObject类的parse方法来解析JSON字符串!!!");
for (Object map : json.entrySet()){
System.out.println(((Map.Entry)map).getKey()+" "+((Map.Entry)map).getValue());
}
//第五种方式
/**
* JSONObject是Map接口的一个实现类
*/
JSONObject jsonObject = JSONObject.parseObject(str);
System.out.println("这个是用JSONObject的parseObject方法来解析JSON字符串!!!");
for (Object map : jsonObject.entrySet()){
System.out.println(((Map.Entry)map).getKey()+" "+((Map.Entry)map).getValue());
}
//第六种方式
/**
* JSONObject是Map接口的一个实现类
*/
Map mapObj = JSONObject.parseObject(str,Map.class);
System.out.println("这个是用JSONObject的parseObject方法并执行返回类型来解析JSON字符串!!!");
for (Object map: mapObj.entrySet()){
System.out.println(((Map.Entry)map).getKey()+" "+((Map.Entry)map).getValue());
}
}
}