-- 2 Gson解析 --
2.1 解析原理
基于事件驱动。
2.2 优势
快速,高效 代码量少 面向对象 数据传输解析方便 可按需解析
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":"男" }}
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; } }}
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解析 --
//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); }}
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,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!