Java Json常用方法

Gson介绍

Google Gson 是 Google 开发的用来在 Java 对象和 JSON 数据之间进行映射的 Java 开源类库,可以将 Java 对象序列化为 JSON,或者由 JSON 转化为 Java 对象。

使用 Gson 库基于以下原因:

  • 标准化 - Gson 是由 Google 管理的标准化库。
  • 高效 - 它是 Java 标准库的可靠,快速和高效的扩展。
  • 优化 - 库高度优化。
  • 支持泛型 - 它为泛型提供广泛的支持。
  • 支持复杂的内部类 - 它支持具有深层继承层次结构的复杂对象。

Gson 安装

java开发我们一般使用ide来开发我们的项目,如myeclipse、idea,eclipse,这里介绍使用idea来安装的我们的Gson lib包。


1. Idea 中导入json包的方法。

下载我们的gson包  https://repo1.maven.org/maven2/com/google/code/gson/gson/2.10/gson-2.10.jar
ctrl+alt+shift+S 打开项目结构

Java中Gson包使用总结

将刚才下载的jar文件导入我们的项目


Java中Gson包使用总结

点击ok导入的效果,这里我们导入了其它的 java json的包。

Java中Gson包使用总结

2.maven 安装

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10</version>
</dependency> 

Gson Java对象转json字符串

import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;

/**
 *Gson Java对象转json字符串
 */
public class JavaBeanToJSON {
    public static void main(String[] args) {
        //定义JSON字符串
        Employee e = new Employee("易学教程","male", 22);
        System.out.println( new Gson().toJson(e) );
        Employee e2 = new Employee("易学教程2","male", 23);
        Employee e3 = new Employee("易学教程3","male", 25);
        List<Employee> list = new ArrayList<>();
        list.add(e);
        list.add(e2);
        list.add(e3);
        System.out.println(new Gson().toJson(list));

    }

    //JavaBean.java
    public static class  Employee{

        private String name;
        private String sex;
        private Integer age;

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

        public Employee(String name, String sex, Integer age) {
            this.name = name;
            this.sex = sex;
            this.age = 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 Integer getAge() {
            return age;
        }

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

}

测试一下

Gson json字符串转java对象

 import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.util.List;

/**
 *Gson json字符串转对象和list
 */
public class StringToJavaObject {
    public static void main(String[] args) {
        //定义JSON字符串
        Gson gson = new Gson();
        String jsonStr = "{\"age\":22,\"name\":\"易学教程\",\"sex\":\"male\"}";
        Employee employee = gson.fromJson(jsonStr, Employee.class);
        System.out.println(employee);
        String jsonStr2 = "[{\"age\":22,\"name\":\"易学教程\",\"sex\":\"male\"},{\"age\":23,\"name\":\"易学教程2\",\"sex\":\"male\"},{\"age\":25,\"name\":\"易学教程3\",\"sex\":\"male\"}]";
        List<Employee> list = gson.fromJson(jsonStr2, new TypeToken<List<Employee>>(){}.getType() );//泛型
        System.out.println(list);
    }

    //JavaBean.java
    public static class  Employee{

        private String name;
        private String sex;
        private Integer age;

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

        public Employee(String name, String sex, Integer age) {
            this.name = name;
            this.sex = sex;
            this.age = 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 Integer getAge() {
            return age;
        }

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

}

测试一下

在上面的例子中我们使用
new TypeToken<List<Employee>>(){}.getType() 
处理泛型的转换。

Gson json字符串转java基本数据类型

import java.util.Arrays;
import com.google.gson.Gson;  

public class GsonTester {
   public static void main(String args[]) {
       Gson gson = new Gson();
      String title = gson.fromJson("\"yxjc123 gson \"", String.class);
      long id = gson.fromJson("1", Long.class);
      boolean easy = gson.fromJson("true", Boolean.class);
      int arrs[] = gson.fromJson("[100,90,85]", int[].class);  
     
      System.out.println("title: " + title);
      System.out.println("id: " + id);
      System.out.println("easy: " +easy);
      System.out.println("arrs:" + Arrays.toString(arrs));
   }
}

测试一下

Gson json字符串转map

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;

public class StringToMap {
    public static void main(String args[]) {
        String jsonString =
                "{title:\"易学教程-gson转换\",id:1,easy:true,arr:[100,90,85]}";
        JsonParser parser = new JsonParser();
        JsonElement map = parser.parse(jsonString);

        if (map.isJsonObject()) {
            JsonObject details = map.getAsJsonObject();
            JsonElement titleNode = details.get("title");
            System.out.println("title: " +titleNode.getAsString());

            JsonElement idNode = details.get("id");
            System.out.println("id: " + idNode.getAsInt());

            JsonElement verifiedNode = details.get("easy");
            System.out.println("easy: " + (verifiedNode.getAsBoolean() ? "Yes":"No"));
            JsonArray arrs = details.getAsJsonArray("arr");

            for (int i = 0; i < arrs.size(); i++) {
                JsonPrimitive value = arrs.get(i).getAsJsonPrimitive();
                System.out.print(value.getAsInt() + " ");
            }
        }
    }
}

测试一下