美文网首页
java常用的几种json解析工具使用

java常用的几种json解析工具使用

作者: Restart白蓝 | 来源:发表于2020-12-04 16:12 被阅读0次

    头痛,某群初学朋友问我他解析json怎么和他以前学的不一样,我本着说百度个教程给他,一搜索乱七八糟复制来复制去的博客一大堆,注释不写注视,一个是gson 一个是fastJson标题也没写明白,行那就我来自己敲一遍,我来总结一下,不对的地方请指教。

    首先json的官方网站

    https://www.json.org/json-zh.html
    https://www.json.org/json-en.html

    再次我们常用的解析工具

    1、JSON 官方出品(非常多种,这里使用org.json)
    2、GSON 谷歌出品
    3、FastJSON 阿里出品
    4、jackson SpringMVC内置解析

    逐一试用一下,所需jar包,直接导入或maven自行找加载方式

    jar包下载https://maven.aliyun.com/mvn/search?spm=a2c6h.13651104.0.0.435836a4lrISzO

    测试前创建两个类

    package json;
    
    public class Person {
        private int id;
        private String name;
        private int age;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    
    
    package json;
    
    import java.util.ArrayList;
    
    public class Departamentas {
        private int id;
        private String name;
        private ArrayList<Person> persons;
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public ArrayList<Person> getPersons() {
            return persons;
        }
    
        public void setPersons(ArrayList<Person> persons) {
            this.persons = persons;
        }
    
        @Override
        public String toString() {
            return "Departamentas{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", persons=" + persons +
                    '}';
        }
    }
    

    一、官方org.json(麻烦一批不好用)

    使用代码如下

    package json;
    
    import org.json.JSONArray;
    import org.json.JSONObject;
    import org.junit.jupiter.api.Test;
    
    
    public class JsonTest {
        @Test
        public void jsonOrg() {
            //解析json
            String json1 = "{'id':1,'name':'bai123'," +
                    "'person':[" +
                    "{'id':5,'name':'白蓝一','age':18}," +
                    "{'id':6,'name':'白蓝二','age':18}" +
                    "]}";
    
            JSONObject jObject1 = new JSONObject(json1);
            //获取对应key的值
            System.out.println(jObject1.get("name"));
            //拿到person数组
            JSONArray person1 = jObject1.getJSONArray("person");
            //获取对应索引的值
            System.out.println(person1.get(0));
            //--------------------------------------------------------
            //生成json
            JSONObject jo1 = new JSONObject();
            jo1.put("id", 7);
            jo1.put("name", "白蓝三");
            jo1.put("age", 18);
            JSONArray ja2 = new JSONArray();
            ja2.put(jo1);
            JSONObject jo3 = new JSONObject();
            jo3.put("id", 2);
            jo3.put("name", "bai124");
            jo3.put("person", ja2);
            String json = jo3.toString();
            System.out.println(json);
        }
    }
    
    

    打印结果


    image.png

    二、Gson 比较好用

    上代码,非常方便

    package json;
    
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    import org.junit.jupiter.api.Test;
    
    import java.util.ArrayList;
    
    public class GsonTest {
        @Test
        public void gson() {
            //解析json
            String json1 = "{'id':1,'name':'bai123'," +
                    "'persons':[" +
                    "{'id':5,'name':'白蓝一','age':18}," +
                    "{'id':6,'name':'白蓝二','age':18}" +
                    "]}";
            Gson gson = new Gson();
            Departamentas departamentas = gson.fromJson(json1, Departamentas.class);
            System.out.println(departamentas);
            //生成json
            departamentas.setName("bai124");
            String json = gson.toJson(departamentas);
            System.out.println(json);
    
        }
    }
    
    

    打印结果


    image.png

    三、fastjson 效率高非常好用

    package json;
    
    import com.alibaba.fastjson.JSON;
    import org.junit.jupiter.api.Test;
    
    import java.util.List;
    
    public class FastTest {
        @Test
        public void fast() {
    
            //解析json
            String json1 = "{'id':1,'name':'bai123'," +
                    "'persons':[" +
                    "{'id':5,'name':'白蓝一','age':18}," +
                    "{'id':6,'name':'白蓝二','age':18}" +
                    "]}";
    
            String json2 = "['白蓝1','白蓝2','白蓝3']";
            Departamentas departamentas = JSON.parseObject(json1, Departamentas.class);
            System.out.println(departamentas);
            //数组解析
            List<String> list = JSON.parseArray(json2, String.class);
            System.out.println(list);
    
            //生成json
            departamentas.setName("生成");
            String s = JSON.toJSONString(departamentas);
            System.out.println(s);
        }
    }
    
    

    打印结果


    image.png

    四、jackson SpringMVC内置的解析器用的就是这个

    注意事项
    //允许出现特殊字符和转义符
    mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true) ;
    //允许出现单引号
    mapper.configure(Feature.ALLOW_SINGLE_QUOTES, true) ;

    package json;
    
    import com.fasterxml.jackson.core.type.TypeReference;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.junit.jupiter.api.Test;
    
    import java.io.IOException;
    import java.util.ArrayList;
    
    public class JackTest {
        @Test
        public void jack() throws IOException {
            //解析json
            String json1 = "{\"id\":1,\"name\":\"bai123\",\"persons\":[{\"id\":1,\"name\":\"白蓝1\",\"age\":20}]}";
            String json2 = "[\"白蓝1\",\"白蓝2\",\"白蓝3\"]";
    
            ObjectMapper mapper = new ObjectMapper();
            Departamentas departamentas = mapper.readValue(json1, Departamentas.class);
            System.out.println(departamentas);
            //2、
            ArrayList<String> list = mapper.readValue(json2,
                    new TypeReference<ArrayList<String>>() {
                    });
            System.out.println(list);
    
            //生成json
            String json=mapper.writeValueAsString(departamentas);
            System.out.println(json);
        }
    }
    
    

    打印结果


    image.png

    本文是几个工具的简单使用,其他方法请自行查询相关API,例如解决时间格式化之类的,可以使用对应的注解,并且要注意的是除了官方的其他3个都是需要使用标准bean.

    转载请注明来源。

    相关文章

      网友评论

          本文标题:java常用的几种json解析工具使用

          本文链接:https://www.haomeiwen.com/subject/yizmwktx.html