专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

jsonarray用法,json的4种解析方式

来源:小易整编  作者:小易  发布时间:2023-02-23 03:50
摘要:jsonarray用法,json的4种解析方式- 1AndroidSDK自带的org.json解析 -1.1解析原理基于文档驱动,需要把全部文件读入到内存中,然后遍历所有数据,根据需要检索想要的数据。1.2相关类JSONObjectJS...

--  2 Gson解析  --

2.1 解析原理

基于事件驱动。

2.2 优势

  • 快速,高效
  • 代码量少
  • 面向对象
  • 数据传输解析方便
  • 可按需解析
2.3 解析流程
根据所需取的数据 建立1个对应于JSON数据的JavaBean类,即可通过简单操作解析出所需数据。
Gson 不要求JavaBean类里面的属性一定全部和JSON数据里的所有key相同,可以按需取数据。
2.4 使用
创建一个与JSON数据对应的JavaBean类(用作存储需要解析的数据)。
  • JSON的大括号对应一个对象
    • 对象里面有key,value
    • JavaBean的类属性名 = key
  • JSON的中括号对应一个数组
  • JavaBean里面对应的也是数组
  • 对象里可以有值/对象
  • 若对象里面只有值,没有key,则说明是纯数组,对应JavaBean里的数组类型
  • 若对象里面有值和key,则说明是对象数组,对应JavaBean里的内部类
  • 对象嵌套
    • 建立内部类 该内部类对象的名字 = 父对象的key ,类似对象数组

{    "key":"value",    "simpleArray":[        1,        2,        3    ],    "arrays":[        {            "arrInnerClsKey":"arrInnerClsValue",            "arrInnerClsKeyNub":1        }    ],    "innerclass":{        "name":"Musk",        "age":50,        "sex":"男"    }}

与之对应的JavaBean:

public class JsonJavaBean {    private String key;    private List<Integer> simpleArray;    private List<ArraysBean> arrays;    private InnerclassBean innerclass;    public String getKey() {        return key;    }    public void setKey(String key) {        this.key = key;    }    public List<Integer> getSimpleArray() {        return simpleArray;    }    public void setSimpleArray(List<Integer> simpleArray) {        this.simpleArray = simpleArray;    }    public List<ArraysBean> getArrays() {        return arrays;    }    public void setArrays(List<ArraysBean> arrays) {        this.arrays = arrays;    }    public InnerclassBean getInnerclass() {        return innerclass;    }    public void setInnerclass(InnerclassBean innerclass) {        this.innerclass = innerclass;    }    private static class ArraysBean {        private String arrInnerClsKey;        private int arrInnerClsKeyNub;        public String getArrInnerClsKey() {            return arrInnerClsKey;        }        public void setArrInnerClsKey(String arrInnerClsKey) {            this.arrInnerClsKey = arrInnerClsKey;        }        public int getArrInnerClsKeyNub() {            return arrInnerClsKeyNub;        }        public void setArrInnerClsKeyNub(int arrInnerClsKeyNub) {            this.arrInnerClsKeyNub = arrInnerClsKeyNub;        }    }    private static class InnerclassBean {        private String name;        private int age;        private String sex;        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;        }        public String getSex() {            return sex;        }        public void setSex(String sex) {            this.sex = sex;        }    }}

2.5 示例代码

public class GsonUse {    public static void main(String[] args) throws Exception {        Student student = new Student();        student.setName("John");        student.setAge(20);        student.setSex("男");        List<Course> courses = new ArrayList<>();        courses.add(new Course("语文", 99));        courses.add(new Course("地理", 59));        student.setCourses(courses);        Gson gson = new Gson();        //在项目根目录下的json文件夹下生成Jgsonjson.json文件        File file = new File("json/gsonjson.json");        FileOutputStream fos = new FileOutputStream(file);        OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");        JsonWriter jw = new JsonWriter(osw);        gson.toJson(student, new TypeToken<Student>() {        }.getType(), jw);        jw.flush();        jw.close();        //反序列化为JavaBean        FileInputStream fis = new FileInputStream(file);        InputStreamReader isr = new InputStreamReader(fis);        JsonReader jr = new JsonReader(isr);        Student student1 = gson.fromJson(jr, new TypeToken<Student>() {        }.getType());        System.out.println(student1);    }}

--  3 Jackson解析  --

3.1 解析原理
基于事件驱动。
3.2 优势
解析效率最高;在数据量大的情况优势尤为明显、占存少。
3.3 缺点
Json数据里面的所有key都有所对应,也就是必须完全解析文档,如果要按需解析的话可以拆分Json来读取,操作和解析方法复杂。
3.4 适用场景
适用于需要处理超大型JSON文档、不需要对JSON文档进行按需解析、性能要求较高的场合。
3.5 解析过程
类似Gson,先创建1个对应于JSON数据的JavaBean类,再通过简单操作即可解析。
与Gson解析不同的是:Gson可按需解析,即创建的JavaBean类不一定完全涵盖所要解析的JSON数据,按需创建属性;但Jackson解析对应的JavaBean必须把Json数据里面的所有key都有所对应,即必须把JSON内的数据所有解析出来,无法按需解析。
3.6 使用
引入依赖

//Jacksonimplementation 'com.fasterxml.jackson.core:jackson-databind:2.13.1'implementation 'com.fasterxml.jackson.core:jackson-core:2.13.1'implementation 'com.fasterxml.jackson.core:jackson-annotations:2.13.1'

public class JacksonUse {    public static void main(String[] args) throws Exception {        Student student = new Student();        student.setName("HongKong Doll");        student.setSex("女");        student.setAge(26);        List<Course> courses = new ArrayList<>();        courses.add(new Course("Art", 100));        courses.add(new Course("Love", 99));        student.setCourses(courses);        ObjectMapper objectMapper = new ObjectMapper();        //序列化 生成json文件        File file = new File("json/jacksonjson.json");        FileOutputStream fos = new FileOutputStream(file);        objectMapper.writeValue(fos, student);        //反序列化 json文件转为JavaBean        Student student1 = objectMapper.readValue(file, Student.class);        System.out.println(student1);    }}

注意:json里的key必须和JavaBean中的字段全部对应。如果没对应,比如json中多了一个"hobby"字段,JavaBean中没有,运行就会报错:

Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "hobby" (class site.exciter.learn.json.Student), not marked as ignorable (4 known properties: "courses", "name", "sex", "age"]) at [Source: (File); line: 3, column: 13] (through reference chain: site.exciter.learn.json.Student["hobby"])


本文地址:百科问答频道 https://www.neebe.cn/wenda/903299_2.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • jsonobject的用法,jsonobject的使用

    jsonobject的用法,jsonobject的使用

    jsonobject的用法,jsonobject的使用在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、...

  • json数组,json数组详解

    json数组,json数组详解

    json数组,json数组详解简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成。一、数组作为JSON对象["Ford","BMW","Fiat"]在JSON中的数组,几乎和在JavaScript中数组相...

  • jsonarray用法,json的4种解析方式

    jsonarray用法,json的4种解析方式

    jsonarray用法,json的4种解析方式-- 1AndroidSDK自带的org.json解析 --1.1解析原理基于文档驱动,需要把全部文件读入到内存中,然后遍历所有数据,根据需要检索想要的数据。1.2相关类JSONObjectJS...

  • 周排行
  • 月排行
  • 年排行

精彩推荐