首先json这玩意做开发的或多或少都有接触的,我就是反反复复的接触json的相关应用场景,以及反反复复的混淆和忘记。也就是刚刚在写一个java模拟 发送http请求的时候模块的时候,被自己的这个玩的要死,直接集合toString(),得到的结果看上去和差不多,但是将这个做为json给别人解析的时候却出了问题。所以呢,在此总结一下也是有必要的。json的jar有很多,我也用过不少杂七杂八的,我先慢慢来总结吧,从现在开始用一个总结一个。(PS:我见过强大的man,json从来都是用String一个个拼接的,但是人家没有错写了好几年代码,我不是说他不对,我觉得他现在用这些jar,就会很明白工具做了啥。我觉得走走弯路是好事)
1.fastjson
maven依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.39</version>
</dependency>
fastjson:java集合对象转json字符串
@Test
public void fastJsonTest01(){
Map<String,String> map1 = new HashMap<>();
map1.put("name","yanyan");
map1.put("sex","man");
Map<String,String> map2 = new HashMap<>();
map2.put("name","yanman");
map2.put("sex","man");
List<Map<String, String>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
System.out.println(list.toString());
String jsonStr = JSON.toJSONString(list);
System.out.println(jsonStr);
}
输出如下,很明显我写的想当然的用集合的toString()是错误的。
[{sex=man, name=yanyan}, {sex=man, name=yanman}]
[{"sex":"man","name":"yanyan"},{"sex":"man","name":"yanman"}]
fastjson:json字符串转java集合
这里稍微注意下,json最外层是数组结构也就是[ ]这样的要用parseArray,也很能理解{ }用parseObject。
@Test
public void fastJsonTest01(){
Map<String,List<String>> map = new HashMap<>();
map.put("list1", Arrays.asList("value1","value2"));
map.put("list2", Arrays.asList("value3","value4","value5"));
String jsonStr = JSON.toJSONString(map);
JSONObject jsonObject = JSON.parseObject(jsonStr);
System.out.println(jsonObject);
JSONArray jsonArray = JSON.parseArray("[{\"sex\":\"man\",\"name\":\"yanyan\"},{\"sex\":\"man\",\"name\":\"yanman\"}]");
System.out.println(jsonArray);
}
还要注意的是JSONArray、JSONObject类似list和map一样去取值但是是Object,强转也行,但是只有是这种类型序列化过来的,才行,不然会报错。
JSONArray jsonArray1 = (JSONArray) jsonObject.get("list1");
for(Object o :jsonArray1){
System.out.println(o);
}
fastjson:java对象与json字符串相互转换
@Test
public void fastJsonTest01(){
MyPerson person = new MyPerson("yan",26,new Date());
String jsonStr = JSON.toJSONString(person);
System.out.println(jsonStr);
MyPerson person1 = JSON.parseObject(jsonStr,MyPerson.class);
System.out.println(person1);
}
public class MyPerson{
private String name;
private Integer age;
private Date creationTime;
@Override
public String toString() {
return "this person name is:" + this.name;
}
public MyPerson(String name, Integer age, Date creationTime) {
this.name = name;
this.age = age;
this.creationTime = creationTime;
}
//get set function
...
}
结果
{"age":26,"creationTime":1509606659849,"name":"yan"}
this person name is:yan