Gson解析Json

参考链接:
https://blog.csdn.net/DQ1005/article/details/51658587
https://blog.csdn.net/huplion/article/details/78984977
https://blog.csdn.net/huyawenz/article/details/87978469
依赖

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

User对象

public class User {

    private Integer id;
    private String username;
    private String password;

    public User() {
    }

    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User对象toString{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

Gson解析

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

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class GsonTest {

    /*基本数据类型
    [
        "aaa",
        "bbb"
    ]
     */
    public void primitiveTypeJson() {
        Gson gson = new Gson();

        List<String> stringList = new ArrayList<String>();
        stringList.add("aaa");
        stringList.add("bbb");

        System.out.println("-----------------基本数据类型转json-----------------");
        String stringListToJson = gson.toJson(stringList);
        System.out.println(stringListToJson);//["aaa","bbb"]

        System.out.println("-----------------解析基本数据类型json-----------------");
        JsonArray jsonArray = new JsonParser().parse(stringListToJson).getAsJsonArray();
        for (JsonElement jsonElement : jsonArray) {
            if (jsonElement.isJsonPrimitive()) {
                System.out.println(jsonElement.getAsString());//aaa/bbb
            }
        }

        System.out.println("-----------------基本数据类型json转对象-----------------");
        System.out.println("方式一:解析成String对象再放入List");
        List<String> jsonToStringList = new ArrayList<String>();
        JsonArray jsonArray2 = new JsonParser().parse(stringListToJson).getAsJsonArray();
        for (JsonElement jsonElement : jsonArray2) {
            if (jsonElement.isJsonPrimitive()) {
                jsonToStringList.add(jsonElement.getAsString());
            }
        }
        //aaa
        //bbb
        for (String str : jsonToStringList) {
            System.out.println(str);
        }

        System.out.println("方式二:直接解析为List<String>");
        List<String> jsonToStringList2 = gson.fromJson(stringListToJson, new TypeToken<List<String>>() {}.getType());
        //aaa
        //bbb
        for (String str : jsonToStringList2) {
            System.out.println(str);
        }

    }


    /*简单对象json操作
    {
        "id": 1,
        "username": "username1",
        "password": "password1"
    }
     */
    public void userJson() {
        Gson gson = new Gson();

        System.out.println("-----------------简单对象转json-----------------");
        User user = new User(1, "username1", "password1");
        String userToJson = gson.toJson(user);
        System.out.println(userToJson);//{"id":1,"username":"username1","password":"password1"}

        System.out.println("-----------------解析简单对象的json-----------------");
        JsonObject jsonObject = new JsonParser().parse(userToJson).getAsJsonObject();
        System.out.println(jsonObject.get("id").getAsInt());//1
        System.out.println(jsonObject.get("username").getAsString());//username1
        System.out.println(jsonObject.get("password").getAsString());//password1

        System.out.println("-----------------简单对象的json转对象-----------------");
        User jsonToUser = gson.fromJson(userToJson, User.class);
        System.out.println(jsonToUser);//User对象toString{id=1, username='username1', password='password1'}
    }


    /*简单对象数组和List
    [
        {
            "id": 1,
            "username": "username1",
            "password": "password1"
        },
        {
            "id": 2,
            "username": "username2",
            "password": "password2"
        }
    ]
     */
    public void userListJson() {
        Gson gson = new Gson();

        User user1 = new User(1, "username1", "password1");
        User user2 = new User(2, "username2", "password2");
        List<User> userList = new ArrayList<User>();
        userList.add(user1);
        userList.add(user2);
        User[] userArr = new User[2];
        userArr[0] = user1;
        userArr[1] = user2;

        System.out.println("-----------------List<User>转json-----------------");
        String userListToJson = gson.toJson(userList);
        //[{"id":1,"username":"username1","password":"password1"},{"id":2,"username":"username2","password":"password2"}]
        System.out.println(userListToJson);

        System.out.println("-----------------user数组转json-----------------");
        String userArrToJson = gson.toJson(userArr);
        //[{"id":1,"username":"username1","password":"password1"},{"id":2,"username":"username2","password":"password2"}]
        System.out.println(userArrToJson);

        System.out.println("List<User>转json和user数组转json是一样的");

        System.out.println("-----------------解析List<User>的json/user数组的json-----------------");
        JsonArray jsonArray = new JsonParser().parse(userListToJson).getAsJsonArray();
        for (JsonElement jsonElement : jsonArray) {
            if (jsonElement.isJsonObject()) {
                JsonObject jsonObject = jsonElement.getAsJsonObject();
                System.out.println(jsonObject.get("id").getAsInt());//1/2
                System.out.println(jsonObject.get("username").getAsString());//username1/username12
                System.out.println(jsonObject.get("password").getAsString());//password1/password2
            }
        }

        System.out.println("-----------------List<User>的json/user数组的json转对象-----------------");
        System.out.println("方式一:解析一个User再放入List");
        List<User> jsonToUserList = new ArrayList<User>();
        JsonArray jsonArray2 = new JsonParser().parse(userListToJson).getAsJsonArray();
        for (JsonElement jsonElement : jsonArray2) {
            //jsonElement转对象方式一
            User jsonToUser = gson.fromJson(jsonElement, new TypeToken<User>() {}.getType());
            //jsonElement转对象方式二
//            User jsonToUser = gson.fromJson(jsonElement, User.class);
            jsonToUserList.add(jsonToUser);
        }

        //User对象toString{id=1, username='username1', password='password1'}
        //User对象toString{id=2, username='username2', password='password2'}
        for (User user : jsonToUserList) {
            System.out.println(user);
        }

        System.out.println("方式二:直接解析为List<User>");
        List<User> jsonToUserList2 = gson.fromJson(userListToJson, new TypeToken<List<User>>() {}.getType());

        //User对象toString{id=1, username='username1', password='password1'}
        //User对象toString{id=2, username='username2', password='password2'}
        for (User user : jsonToUserList2) {
            System.out.println(user);
        }

    }

    /* 复杂对象单个解析
    {
        "Integer": 1,
        "userList": [
            {
                "id": 1,
                "username": "username1",
                "password": "password1"
            },
            {
                "id": 2,
                "username": "username2",
                "password": "password2"
            }
        ],
        "String": "String",
        "Double": 1.23,
        "user": {
            "id": 1,
            "username": "username1",
            "password": "password1"
        }
    }
     */
    public void complexGsonTest() {
        Gson gson = new Gson();

        User user1 = new User(1, "username1", "password1");
        User user2 = new User(2, "username2", "password2");
        List<User> userList = new ArrayList<User>();
        userList.add(user1);
        userList.add(user2);

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("String", "String");//字符串
        map.put("Integer", 1);//整数
        map.put("Double", 1.23);//浮点数
        map.put("user", user1);//对象
        map.put("userList", userList);//对象List

        String complexJson = gson.toJson(map);
        //{"Integer":1,"userList":[{"id":1,"username":"username1","password":"password1"},{"id":2,"username":"username2","password":"password2"}],"String":"String","Double":1.23,"user":{"id":1,"username":"username1","password":"password1"}}
        System.out.println(complexJson);

        System.out.println("-----------------解析复杂对象的json-----------------");
        JsonObject jsonObject = new JsonParser().parse(complexJson).getAsJsonObject();

        // 字符串
        System.out.println(jsonObject.get("String").getAsString());
        // 整数
        System.out.println(jsonObject.get("Integer").getAsInt());
        // 浮点数
        System.out.println(jsonObject.get("Double").getAsDouble());

        // User:查看userJson函数具体解析
        JsonObject userJsonObject = jsonObject.getAsJsonObject("user");
        System.out.println(userJsonObject.get("id").getAsInt());
        System.out.println(userJsonObject.get("username").getAsString());
        System.out.println(userJsonObject.get("password").getAsString());

        // List<User>:查看userListJson函数具体解析
        // 获得JsonArray
        JsonArray userListJsonArray = jsonObject.getAsJsonArray("userList");
        // 遍历JsonArray
        for (JsonElement jsonElement : userListJsonArray) {
            JsonObject asJsonObject = jsonElement.getAsJsonObject();
            System.out.println(asJsonObject.get("id").getAsInt());
            System.out.println(asJsonObject.get("username").getAsString());
            System.out.println(asJsonObject.get("password").getAsString());
        }

        System.out.println("-----------------解析复杂对象的json转成对象,基本数据类型同上-----------------");
        System.out.println("User对象:查看userJson函数具体解析");
        JsonObject userJsonObject2 = jsonObject.getAsJsonObject("user");
        User jsonToUser = gson.fromJson(userJsonObject2, new TypeToken<User>() {}.getType());
        System.out.println(jsonToUser);

        System.out.println("List<User>:查看userListJson函数具体解析");
        JsonArray userListJsonArray2 = jsonObject.getAsJsonArray("userList");
        List<User> users = gson.fromJson(userListJsonArray2, new TypeToken<List<User>>() {}.getType());
        for (User user : users) {
            System.out.println(user);
        }

    }
	
	/* 复杂对象转map再解析
    {
         "Integer": 1,
         "userList": [
             {
                 "id": 1,
                 "username": "username1",
                 "password": "password1"
             },
             {
                 "id": 2,
                 "username": "username2",
                 "password": "password2"
             }
         ],
         "integerList": [
             1,
             2
         ],
         "stringList": [
             "a",
             "b"
         ],
         "doubleList": [
             1.23,
             3.45
         ],
         "String": "String",
         "Double": 1.23,
         "user": {
             "id": 1,
             "username": "username1",
             "password": "password1"
         }
     }
     */
    public void complexMapJson() {
        Gson gson = new Gson();

        User user1 = new User(1, "username1", "password1");
        User user2 = new User(2, "username2", "password2");
        List<User> userList = new ArrayList<User>();
        userList.add(user1);
        userList.add(user2);

        List<Integer> integerList = new ArrayList<Integer>();
        integerList.add(1);
        integerList.add(2);

        List<String> stringList = new ArrayList<String>();
        stringList.add("a");
        stringList.add("b");

        List<Double> doubleList = new ArrayList<Double>();
        doubleList.add(1.23);
        doubleList.add(3.45);

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("String", "String");//字符串
        map.put("Integer", 1);//整数
        map.put("Double", 1.23);//浮点数
        map.put("user", user1);//对象
        map.put("integerList", integerList);//integerList
        map.put("stringList", stringList);//stringList
        map.put("doubleList", doubleList);//doubleList
        map.put("userList", userList);//对象List

        // map转json
        String complexMapJson = gson.toJson(map);
        System.out.println(complexMapJson);
        //{"Integer":1,"userList":[{"id":1,"username":"username1","password":"password1"},{"id":2,"username":"username2","password":"password2"}],"integerList":[1,2],"stringList":["a","b"],"doubleList":[1.23,3.45],"String":"String","Double":1.23,"user":{"id":1,"username":"username1","password":"password1"}}

        // json转Map
        Map jsonToMap = gson.fromJson(complexMapJson, Map.class);

        System.out.println("-----------------解析String-----------------");
        System.out.println(jsonToMap.get("String")); //String
        System.out.println("-----------------解析Integer-----------------");
        System.out.println(jsonToMap.get("Integer")); //1.0
        System.out.println("-----------------解析Double-----------------");
        System.out.println(jsonToMap.get("Double")); //1.23


        System.out.println("-----------------解析User-----------------");
        String userJson = jsonToMap.get("user").toString();
        System.out.println(userJson); //{id=1.0, username=username1, password=password1}
        User jsonToUser2 = gson.fromJson(userJson, User.class);
        System.out.println(jsonToUser2); //User对象toString{id=1, username='username1', password='password1'}

        System.out.println("-----------------解析IntegerList-----------------");
        System.out.println("方式一:直接从map中获取");
        List<Integer> jsonToIntegerList = (List<Integer>) jsonToMap.get("integerList");
        System.out.println("方式二:先获得对应json再解析为IntegerList,具体看-基本数据类型");
        String integerListJson = jsonToMap.get("integerList").toString();
        System.out.println(integerListJson); //[1.0, 2.0]
        List<Integer> jsonToIntegerList2 = gson.fromJson(integerListJson, new TypeToken<List<Integer>>() {}.getType());
        //方式一:1.0   方式二:1
        //方式一:2.0   方式二:2
        for (int i = 0; i < jsonToIntegerList.size(); i++) {
            System.out.println("方式一:" +  jsonToIntegerList.get(i) + "   方式二:" + jsonToIntegerList2.get(i));
        }


        System.out.println("-----------------解析StringList-----------------");
        System.out.println("方式一:直接从map中获取");
        List<String> jsonToStringList = (List<String>) jsonToMap.get("stringList");
        System.out.println("方式二:先获得对应json再解析为StringList,具体看-基本数据类型");
        String stringListJson = jsonToMap.get("stringList").toString();
        System.out.println(stringListJson); //[a, b]
        List<String> jsonToStringList2 = gson.fromJson(stringListJson, new TypeToken<List<String>>() {}.getType());
        //方式一:a   方式二:a
        //方式一:b   方式二:b
        for (int i = 0; i < jsonToStringList.size(); i++) {
            System.out.println("方式一:" +  jsonToStringList.get(i) + "   方式二:" + jsonToStringList2.get(i));
        }

        System.out.println("-----------------解析DoubleList-----------------");
        System.out.println("方式一:直接从map中获取");
        List<Double> jsonToDoubleList = (List<Double>) jsonToMap.get("doubleList");
        System.out.println("方式二:先获得对应json再解析为DoubleList,具体看-基本数据类型");
        String doubleListJson = jsonToMap.get("doubleList").toString();
        System.out.println(doubleListJson); //[1.23, 3.45]
        List<Double> jsonToDoubleList2 = gson.fromJson(doubleListJson, new TypeToken<List<Double>>() {}.getType());
        //方式一:1.23   方式二:1.23
        //方式一:3.45   方式二:3.45
        for (int i = 0; i < jsonToStringList.size(); i++) {
            System.out.println("方式一:" +  jsonToDoubleList.get(i) + "   方式二:" + jsonToDoubleList2.get(i));
        }

        System.out.println("-----------------解析UserList-----------------");
        System.out.println("对像类型List不能直接从map中获取");
        String userListJson = jsonToMap.get("userList").toString();
        // 先获得对应json再解析为DoubleList,具体看-简单对象数组和List
        System.out.println(userListJson); //[{id=1.0, username=username1, password=password1}, {id=2.0, username=username2, password=password2}]
        List<User> jsonToUserList = gson.fromJson(userListJson, new TypeToken<List<User>>() {}.getType());
        //User对象toString{id=1, username='username1', password='password1'}
        //User对象toString{id=2, username='username2', password='password2'}
        for (User u : jsonToUserList) {
            System.out.println(u);
        }
    }

    public static void main(String[] args) {
        GsonTest gsonTest = new GsonTest();
        gsonTest.complexGsonTest();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值