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
@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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!