Gson简单使用

Gson工具类使用

常用类:JsonArray JsonElement JsonObject JsonParser TypeToken

在线文档: gson2.2 Api

pom.xml

导入gson包

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

简单使用

package com.commons.test;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.tianbao.flights.core.commons.utils.GsonUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

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

/**
 * @author Jiangcheng Xiang
 *
 * Gson使用demo
 */
public class GsonTest {

    private static final Logger logger = LoggerFactory.getLogger(GsonTest.class);

    public static void main(String[] args) {

        // ---------------------解析json
        String json = "{\n" +
                "    \"cid\":\"whitescreen\",\n" +
                "    \"adultNumber\":1,\n" +
                "    \"itineraries\":[\n" +
                "        {\n" +
                "            \"departureCode\":\"YVR\",\n" +
                "            \"arrivalCode\":\"LXA\",\n" +
                "            \"departureDate\":\"20190309\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"departureCode\":\"LXA\",\n" +
                "            \"arrivalCode\":\"YVR\",\n" +
                "            \"departureDate\":\"20190313\"\n" +
                "        }\n" +
                "    ],\n" +
                "    \"currency\":\"CNY\",\n" +
                "    \"status\":0,\n" +
                "    \"msg\":\"success\"\n" +
                "}";
        if (StringUtils.hasText(json)) {
            JsonParser parser = new JsonParser();
            // 转换为json
            JsonElement jsonElement = parser.parse(json);
            JsonObject jsonObject = jsonElement.getAsJsonObject();
            // 解析
            String cid = jsonObject.get("cid").getAsString();
            int adultNumber = jsonObject.get("adultNumber").getAsInt();
            JsonArray itineraries = jsonObject.get("itineraries").getAsJsonArray();
            logger.info("cid: [{}], adultNumber: [{}]", cid, adultNumber);
            logger.info("cid: [{}], itineraries: [{}], adultNumber: [{}]", cid, itineraries, adultNumber);
        }

        // ---------------封装一个json字符串
        JsonObject jsonStr = new JsonObject();
        jsonStr.addProperty("name", "shuaishuai");
        jsonStr.addProperty("id", "00001");
        logger.info("get json str: [{}]", jsonStr);

        // ---------------json字符串转数组 Map
        jsonToObject();

    }

    public static void jsonToObject() {
        // list
        List<Person> persons = new ArrayList<>();
        Person person = new Person();
        person.setAge(1);
        person.setName("xxx");
        persons.add(person);
        Person person1 = new Person();
        person1.setAge(2);
        person1.setName("jjj");
        persons.add(person1);

        String personJson = GsonUtils.toJson(persons);
        List<Person> list = GsonUtils.fromJson(personJson, new TypeToken<ArrayList<Person>>() {
        }.getType());
        logger.info("result [{}]", list);

        // map
        Map<String, String> map = new HashMap<>();
        map.put("name", "xjc");
        map.put("age", "20");
        String mapJson = GsonUtils.toJson(map);
        Map<String, String> result = GsonUtils.fromJson(mapJson, new TypeToken<Map<String, String>>() {
        }.getType());
        logger.info("result [{}]", result);
    }
}

class Person {

    private String name;

    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

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

Gson工具类

package com.commons.utils;

import com.google.gson.*;
import org.springframework.util.StringUtils;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public abstract class GsonUtils {
    private static Gson gson = new Gson();
    private static Gson gsonShowNull = new GsonBuilder().serializeNulls().create();

    public static <T> T fromJson(String json, Class<T> classOfT) {
        return gson.fromJson(json, classOfT);
    }

    public static <T> T fromJson(String json, Class<T> classOfT, Object adapter) {
        if (adapter == null) {
            Gson gson = new Gson();
            return gson.fromJson(json, classOfT);
        }
        Gson gson = new GsonBuilder().registerTypeAdapter(classOfT, adapter).create();
        return gson.fromJson(json, classOfT);
    }

    public static <T> T fromJson(String json, Type typeOfT) {
        return gson.fromJson(json, typeOfT);
    }

    public static String toJson(Object object) {
        if (object == null) {
            return "";
        }
        return gson.toJson(object);
    }

    public static String toJsonShowNull(Object object) {
        if (object == null) {
            return "";
        }
        return gsonShowNull.toJson(object);
    }

    public static String prettyJson(String input) {
        JsonParser parser = new JsonParser();
        JsonObject json = parser.parse(input).getAsJsonObject();
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        return gson.toJson(json);
    }

    public static String jsonArrayAsString(JsonArray jsonArray) {
        List<String> strList = new ArrayList<>();
        for (JsonElement jsonElement : jsonArray) {
           strList.add(jsonElement.getAsString());
        }
        return StringUtils.collectionToCommaDelimitedString(strList);
    }

    public static JsonElement toJsonElement(Object object) {
        return gson.toJsonTree(object);
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值