美文网首页程序员
Java解析JSON的四种方式

Java解析JSON的四种方式

作者: 云恒子 | 来源:发表于2019-04-17 10:23 被阅读0次

    一、什么是JSON

    JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于阅读和编写,同时也易于解析和生成,并有效地提升网络传输效率。

    二、JSON 语法

    (1)数据在名称/值对中
    (2)数据由逗号分隔
    (3)大括号保存对象
    (4)中括号保存数组

    三、Java中JSON的生成与解析的四种方式(简单的Demo):

    一个实体类:用于与JSON数据进行相互转换

    public class Person {
        private String name;
        private String sex;
        private int age;
        public Person(String name, String sex, int age) {
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public String getSex() {
            return sex;
        }
        public int getAge() {
            return age;
        }
        @Override
        public String toString() {
            return "Person{name='" + name + '\'' + ", sex='" + sex + '\'' + ", age=" + age + '}';
        }
    }
    

    (1)利用传统方式:
    由实体类生成Json字符串:

    public Person getPerson(){
        return new Person("张三", "男", 25);
    }
    @Test
    public void EntityToJson(){
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", getPerson().getName());
        jsonObject.put("sex", getPerson().getSex());
        jsonObject.put("age", getPerson().getAge());
        System.out.println(jsonObject.toString());
    }
    

    由Json字符串生成实体类:

    @Test
    public void JsonToEntity(){
        String jsonString = "{\"sex\":\"男\",\"name\":\"张三\",\"age\":25}";
        JSONObject jsonObject = new JSONObject(jsonString);
        Person person = new Person(jsonObject.get("name").toString(), jsonObject.get("sex").toString(), Integer.valueOf(jsonObject.get("age").toString()));
        System.out.println(person.toString());
    }
    

    (2)利用Jackson方式:
    由实体类生成Json字符串:

    @Test
    public void EntityToJson() throws IOException {
        Person person = new Person("张三", "男", 25);
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = objectMapper.writeValueAsString(person);
        System.out.println(jsonString);
    }
    

    由Json字符串生成实体类:

    @Test
    public void JsonToEntity() throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = "{\"name\":\"张三\",\"sex\":\"男\",\"age\":25}";
        Person person = objectMapper.readValue(jsonString, Person.class);
        System.out.println(person);
    }
    

    (3)利用GSON方式:
    由实体类生成Json字符串:

    @Test
    public void EntityToJson(){
        Person person = new Person("张三", "男", 25);
        Gson gson = new Gson();
        String jsonString = gson.toJson(person);
        System.out.println(jsonString);
    }
    

    由Json字符串生成实体类:

    @Test
    public void JsonToEntity(){
        String jsonString = "{\"name\":\"张三\",\"sex\":\"男\",\"age\":25}";
        Gson gson = new Gson();
        Person person = gson.fromJson(jsonString, Person.class);
        System.out.println(person.toString());
    }
    

    (4)利用FastJSON方式
    由实体类生成Json字符串:

    @Test
    public void EntityToJson(){
        Person person = new Person("张三", "男", 25);
        Object jsonString = JSON.toJSON(person);
        System.out.println(jsonString.toString());
    }
    

    由Json字符串生成实体类:

    @Test
    public void JsonToEntity(){
        String jsonString = "{\"name\":\"张三\",\"sex\":\"男\",\"age\":25}";
        Person person = JSON.parseObject(jsonString, Person.class);
        System.out.println(person.toString());
    }
    

    四、几种方式的比较

    类型 简介
    传统Json方式: 复杂的Json数据转换成实体类存在缺陷,性能和功能不够完善
    Jackson方式: 复杂的Json数据转换成实体类存在缺陷,性能和功能优于传统方式
    Gon方式: 功能方面在几种方式中最优,性能方面不如Jackson方式
    FastJson方式: 复杂的实体类转换成Json数据存在缺陷,解析json的速度优于其他方式

    版权声明:未经许可,禁止转载

    相关文章

      网友评论

        本文标题:Java解析JSON的四种方式

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