欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSON解析:FasJson和Gson工具的使用

程序员文章站 2022-12-20 20:15:06
JSON解析:FasJson和Gson工具的使用JSON1. JSON简介2. JSON支持的数据类型3. JSON语法格式JSON常用解析工具1. FastJson2. GsonJSON1. JSON简介JAVAScript Object Notation是一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持)JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.or...

JSON

1. JSON简介

  • JAVAScript Object Notation是一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。
  • JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org
  • JSON是目前网络中主流的数据传输格式之一,应用十分广泛。

2. JSON支持的数据类型

  JSON里面的数据是以一种键值对的方式存在,( " key " : " value " )中值的类型可以是下面数据类型中的任意一种:

  1. 数字(整数或浮点数)
  2. 逻辑值(true 或 false)
  3. 字符串(在双引号中)
  4. 数组(在方括号中)
  5. 函数
  6. 对象(在大括号中)
  7. null

3. JSON语法格式

  1. 键与值之间使用冒号连接, 多个键值对之间使用逗号分隔。
  2. 键值对的键应使用引号引住 (通常Java解析时,键不使用引号会报错,而JS能正确解析)
  3. 键值对的值,可以是JS中的任意类型的数据。

JSON解析中的三种类型情况:

  1. {}解析 ’ 大括号 ’ 类型,例如:
	String jsonObj = "{
    "name": "小明", 
    "sex": "男", 
    "age": 20, 
    "phone": "18695124231"
}";
	
  1. [ ] 解析 ’ 中括号 ’ 类型,例如:
  • Array(数组类型):使用[ ]包含所有元素,每个元素用逗号分隔,元素可以是任意的值
String jsonArr = "["小明", "", 20, "18695124231"]";
  1. 第三种是1与2的组合方法例如:
String jsonObj = "{
	"sxe":"男",
	"name":"翟大刚",
	"age":24,
	"new":["芜湖风","男",28]
}";

JSON常用解析工具

Gson和Fastjson的区别

  1. Gson的优势是转换复杂对象,性能消耗比FastJson大;
  2. 而FastJson优势是解析转换复杂对象的速度最快,但是对一些复杂转换就会出现问题。

  在开发中,如果性能满足的情况下,推荐使用Gson。因为对于复杂类型,比如原子类如:AtomicLong属性,fastjson会按照基本类型解析,而不是对象。这样会导致反序列化的时候数据不完整,所以,强烈建议Gson。

1. Gson

1.1 简介

  1. Gson是目前功能最全的Json解析神器。
  2. Gson的应用主要为:toJson与fromJson两个转换函数,无依赖,不需要额外的jar,能够直接跑在JDK上。
  3. 类里面只要有get和set方法,Gson可以将复杂类型的json完美转换到bean,以及bean完美转换到json。
  4. 在使用这种对象转换之前,需要先创建好对象的类型以及其成员,才能成功的将JSON字符串成功转换成相对应的对象。

1.2 添加依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

1.3 测试对象Student类

public class Student {
    private String name;
    private String sex;
    private int age;

    public Student(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name) &&
                Objects.equals(sex, student.sex);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, sex, age);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student() {
    }
}

1.4 bean转换json:toJson

转换JSON字符串的步骤:

  1. 引入JAR包
  2. 在需要转换JSON字符串的位置编写如下代码即可:
    String json = new Gson().toJSON(要转换的对象);

代码示例:

public static void main(String[] args) {
		//创建Gson对象
        Gson gson = new Gson();
        //创建学生类
        Student student = new Student("刘虎","男",20);
        //将对象转换为JSON字符串
        String s = gson.toJson(student);
        System.out.println(s);
      
}

运行结果:

{"name":"刘虎","sex":"男","age":20}

1.5 json转换bean:fromJson

步骤:

  1. 引入JAR包
  2. 在需要转换Java对象的位置, 编写如下代码:
    对象 = new Gson().fromJson(JSON字符串,对象类型.class);

代码示例:

public static void main(String[] args) {
		//创建Gson对象
        Gson gson = new Gson();
        Student student1 = gson.fromJson("{\"name\":\"刘虎\",\"sex\":\"男\",\"age\":20}", Student.class);
        System.out.println(student1);      
}

运行结果:

Student{name='刘虎', sex='男', age=20}

1.6 将json转换成复杂类型的bean

public static void main(String[] args) {
		//创建Gson对象
        Gson gson = new Gson();
        //将Json格式文件转换成HashMap
        HashMap hashMap = gson.fromJson("{\"name\":\"刘虎\",\"sex\":\"男\",\"age\":20}", HashMap.class);
        System.out.println(hashMap.get("name") + "," + hashMap.get("sex") + "," + hashMap.get("age"));

        // 将json转换成List
        String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
        // 将json转换成List
        List list = gson.fromJson(json, List.class);
        System.out.println(list.get(0));
}

2. FastJson

2.1 简介

  1. FastJson由阿里使用Java开发的高性能的JSON处理器,无依赖,不需要额外的jar,能够直接跑在JDK上。
  2. FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型无法解析,导致Json转换出错,需要制定引用。
  3. FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。

2.2 依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.75</version>
</dependency>

2.3 bean转换json: toJSONString

转换JSON字符串的步骤:

  1. 引入JAR包
  2. 在需要转换JSON字符串的位置编写如下代码即可:
    String json=JSON.toJSONString(要转换的对象);

代码示例:

public static void main(String[] args) {
	Student student = new Student("翟大刚","男",24);
    Object o = JSON.toJSONString(student);
    System.out.println(o.toString());
}

运行结果:

{"age":24,"name":"翟大刚","sex":"男"}

2.4 json转换bean:parseObject

步骤:

  1. 引入JAR包
  2. 在需要转换Java对象的位置, 编写如下代码:
    类型 对象名 = JSON.parseObject( JSON字符串 , 类型.class );

    List<类型> list = JSON.parseArray( JSON字符串 , 类型.class );

代码示例:

public static void main(String[] args) {
	Student student = new Student("翟大刚","男",24);
    Object o = JSON.toJSONString(student);
    System.out.println(o.toString());
}

复杂类型:将json转换成List,Set,Array

public static void main(String[] args) {
		//将json转换成Array
        String jsonArr = "[ \"小明\",\"男\",\"学生\",25 ]";
        JSONArray objects = JSON.parseArray(jsonArr);
        System.out.println(objects);
  
		String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
		 // 将json转换成List
        List list = JSON.parseObject(json, List.class);
        System.out.println(list.get(0));
        //将json转换成Set
		Set set = JSON.parseObject(json, Set.class);
        System.out.println(set.toString());
        
}

运行结果:

["小明","男","学生",25]
{"name":"Json技术","id":"1"}
[{"name":"java技术","id":"2"}, {"name":"Json技术","id":"1"}]

3.如何选择Gson和FastJson

在项目选型的时候可以使用Google的Gson和阿里巴巴的FastJson两种并行使用,

  • 如果只是功能要求,没有性能要求,可以使用google的Gson。
  • 如果有性能上面的要求,可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean。

本文地址:https://blog.csdn.net/weixin_41758106/article/details/109574970