Gson,估计也有很多开发的同学听过这个技术,是一个谷歌开源的JSon解析库,我们国内一般用的比较多的是fastjson,基于阿里开源的,但是他曾经出现过问题,关于标准化的,所以有一些项目会使用这种库用来解析:
JSON:轻量级的交互语言;
Json(JavaScript Object Notation) 对象符号
一种轻量级的数据交互格式,易于传输和编写,完成采用独立于语言的文本格式
一般作为客户端与服务器之间业务数据的传递格式标准
2.JSON存在于两种形式;
一个是对象,json对象: (获取里面的数据,内容,键值对–要json对象)
另一种就是字符串, json字符串;( 服务器与客户端相互的时候,用json字符串)
3.在Java中应用:
用的是谷歌GSON
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
也可以使用hutool中的json
3.1 Javabean转化成json之间的互传:
package com.jsonTest.test;
import com.google.gson.reflect.TypeToken;
import com.google.gson.Gson;
import com.jsonTest.entity.Student;
import com.jsonTest.entity.StudentListType;
import com.jsonTest.entity.StudentMapType;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GsonTest {
/**
* javabean与json中的关系
*/
@Test
public void test1(){
Student student=new Student("1","web");
Gson gson=new Gson();
String toJson = gson.toJson(student);
System.out.println(student);
System.out.println("普通对象变成json"+toJson);
/**
* Student(id=1, name=web)
* 普通对象变成json{"id":"1","name":"web"}
*/
/**
* 将当前的json转化成Javabean
*/
Student student1 = gson.fromJson(toJson, Student.class);
System.out.println(student1);
}
@Test
public void TestList(){
List<Student> studentList=new ArrayList<>();
studentList.add(new Student("2","小路卡"));
studentList.add(new Student("3","小卢卡"));
Gson gson=new Gson();
//list转成json
String jsonList = gson.toJson(studentList);
System.out.println("lIST"+studentList);
System.out.println("list-->JSON"+jsonList);
/**
* lIST[Student(id=2, name=小路卡), Student(id=3, name=小卢卡)]
* list-->JSON[{"id":"2","name":"小路卡"},{"id":"3","name":"小卢卡"}]
*/
// jsonList转成对象或者List
List list = gson.fromJson(jsonList, List.class);
System.out.println(list);//这个会发生类型转化异常
/**
* lIST转成对象需要一个type做标准
*/
List list1 = gson.fromJson(jsonList, new StudentListType().getType());
System.out.println(list1);
}
@Test
public void TestMap(){
Map<String,Student> studentMap=new HashMap();
studentMap.put("1",new Student("4","lucas"));
studentMap.put("2",new Student("5","xiaoLucas"));
Gson gson=new Gson();
//将map转成json
String toJsonMap = gson.toJson(studentMap);
System.out.println("jsonMap"+toJsonMap);
/**
* jsonMap{"1":{"id":"4","name":"lucas"},"2":{"id":"5","name":"xiaoLucas"}}
*/
/**
* 将map转成一个个对象
*/
Map<String,Student> student = gson.fromJson(toJsonMap, new StudentMapType().getType());
System.out.println(student);
Student student1 = student.get(1);
System.out.println(student1);
/**
* 在每次转换的时候都会出现新增的Type类,所以我们可以使用匿名内部类的方式
*/
}
@Test
public void TestMap2(){
Map<String,Student> studentMap=new HashMap();
studentMap.put("1",new Student("4","lucas"));
studentMap.put("2",new Student("5","xiaoLucas"));
Gson gson=new Gson();
//将map转成json
String toJsonMap = gson.toJson(studentMap);
System.out.println("jsonMap"+toJsonMap);
/**
* jsonMap{"1":{"id":"4","name":"lucas"},"2":{"id":"5","name":"xiaoLucas"}}
*/
/**
* 将map转成一个个对象
*/
Map<String,Student> student = gson.fromJson(toJsonMap,new TypeToken<Map<String,Student>>(){}.getType());
System.out.println(student);
Student student1 = student.get("1");
System.out.println(student1);
/**
* jsonMap{"1":{"id":"4","name":"lucas"},"2":{"id":"5","name":"xiaoLucas"}}
* {1=Student(id=4, name=lucas), 2=Student(id=5, name=xiaoLucas)}
* Student(id=4, name=lucas)
*/
/**
* 在每次转换的时候都会出现新增的Type类,所以我们可以使用匿名内部类的方式
*/
}
}
package com.jsonTest.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@EqualsAndHashCode
@Data
public class Student implements Serializable {
private String id ;
private String name;
public Student(String s, String web) {
this.id=s;
this.name=web;
}
}
package com.jsonTest.entity;
import com.google.gson.reflect.TypeToken;
import java.util.List;
/**
* List转换的时候, json转换成一个type 继承这个typeToken类
*/
public class StudentListType extends TypeToken<List<Student>> {
}
package com.jsonTest.entity;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;
public class StudentMapType extends TypeToken<HashMap<String,Student>> {
}
主要是关于Java bean与json的解析:其实我们可以用别的技术用于解析:
卢卡寄语:
对于普通的json解析,我们可以使用hutool中JSONutil来使用,
fastJSON,Gson,甚至自己手动也可以,其实这里面主要是对于格式解析成POJO的对象。
在实际开发过程中, JSONUTIL,解析用的比较多, 其中这个hutool(糊涂)tool的工具库,是Java开发中常用的类库,比如说POI,IO,JSON,以及布隆过滤,MD5,token等都可以好的包装。
hutool的官网
快速入手
我是卢卡,努力做一个技术的输出者,今天也要加油哦。
原文始发于微信公众号(卢卡多多):Gson的快速入手
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/23472.html