java里Json的使用

首先json这玩意做开发的或多或少都有接触的,我就是反反复复的接触json的相关应用场景,以及反反复复的混淆和忘记。也就是刚刚在写一个java模拟 发送http请求的时候模块的时候,被自己的这个玩的要死,直接集合toString(),得到的结果看上去和差不多,但是将这个做为json给别人解析的时候却出了问题。所以呢,在此总结一下也是有必要的。json的jar有很多,我也用过不少杂七杂八的,我先慢慢来总结吧,从现在开始用一个总结一个。(PS:我见过强大的man,json从来都是用String一个个拼接的,但是人家没有错写了好几年代码,我不是说他不对,我觉得他现在用这些jar,就会很明白工具做了啥。我觉得走走弯路是好事)

1.fastjson

maven依赖

        
        
            com.alibaba
            fastjson
            1.2.39
        

fastjson:java集合对象转json字符串

    @Test
    public void fastJsonTest01(){
        Map map1 = new HashMap<>();
        map1.put("name","yanyan");
        map1.put("sex","man");
        Map map2 = new HashMap<>();
        map2.put("name","yanman");
        map2.put("sex","man");
        List> 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> 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

2.gson

你可能感兴趣的:(java里Json的使用)