写点什么

Gson 的快速使用

用户头像
卢卡多多
关注
发布于: 1 小时前
Gson的快速使用

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@Datapublic 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的官网


快速入手


我是卢卡,努力做一个技术的输出者,今天也要加油哦。

发布于: 1 小时前阅读数: 3
用户头像

卢卡多多

关注

还未添加个人签名 2020.04.12 加入

还未添加个人简介

评论

发布
暂无评论
Gson的快速使用