Java和JSON的转换实战

断了今生、忘了曾经 提交于 2020-04-28 12:42:14

一 点睛

1 说明

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 JSON采用完全独立于语言的文本格式,而且很多语言都提供了对json的支持(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这样就使得JSON成为理想的数据交换格式。

数据交换格式,是指客户端和服务器之间通信,传递数据时,数据使用的格式是json。

这里介绍三种常用的转换

1 对象和JSON字符串的相互转换。

2 List和JSON字符串的相互转换。

3 Map和JSON字符串的相互转换。

这里使用谷歌提供的gson工具类。

2 POM

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

二 代码

1 实体类

/**
 * Copyright (C), 2020-2020, 软件公司
 * FileName: Scenery
 * Author:   cakin
 * Date:     2020/4/27
 * Description: 实体类
 */
package json;

import lombok.AllArgsConstructor;
import lombok.ToString;

/**
 * @ClassName: Scenery
 * @Description: 实体类
 * @Date: 2020/4/27
 * @Author: cakin
 */
@AllArgsConstructor
@ToString
public class Scenery {
    /**
     * id
     */
    private int id;
    /**
     * 名字
     */
    private String name;
    /**
     * 地址
     */
    private String address;
}

2 测试类

/**
 * Copyright (C), 2020-2020, 软件公司
 * FileName: GsonTest
 * Author:   cakin
 * Date:     2020/4/27
 * Description: json测试
 */
package json;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import lombok.extern.slf4j.Slf4j;

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

import static common.Constant.NUM2;
import static common.Constant.NUM4;
import static common.Constant.NUM5;
import static common.Constant.SPLIT_LINE;

/**
 * @className: GsonTest
 * @description: json测试
 * @date: 2020/4/27
 * @author: cakin
 */
@Slf4j
public class GsonTest {
    public static void main( String[] args ) {
        log.info(SPLIT_LINE);
        jsonObjTest();
        log.info(SPLIT_LINE);
        jsonListTest();
        log.info(SPLIT_LINE);
        jsonMapTest();
        log.info(SPLIT_LINE);
    }

    /**
     * JSON 和 对象 的相互转换
     */
    private static void jsonObjTest() {
        Scenery scenery = new Scenery(1, "天坛公园", "北京");

        Gson gson = new Gson();
        // 使用 toJson() 方法将Java对象转换json字符串
        String json = gson.toJson(scenery);
        log.info(json);

        // 使用 formJson 方法将 json 字符串转换为Java对象
        Scenery sceneryBean = gson.fromJson(json, Scenery.class);
        log.info("" + sceneryBean);
    }

    /**
     * JSON 和 List 的相互转换
     */
    private static void jsonListTest() {
        // List 和json的互转
        List<Scenery> list = new ArrayList<>();
        list.add(new Scenery(NUM2, "野人谷风景区", "湖北"));
        list.add(new Scenery(NUM4, "绿野山庄", "浙江"));
        list.add(new Scenery(NUM5, "天坛公园", "北京"));
        // 创建 gson 工具类
        Gson gson = new Gson();
        // 使用 toJson() 方法 把list集合转换为json字符串
        String json = gson.toJson(list);
        log.info(json);

        // 使用fromJson() 方法将json字符串转换为list集合
        // 使用匿名内部类
        List<Scenery> list1 = gson.fromJson(json, new TypeToken<List<Scenery>>() {
        }.getType());
        log.info("" + list1);

        // 转成java对象
        Scenery scenery = list1.get(0);
        log.info("" + scenery);

    }

    /**
     * JSON 和 Map 的相互转换
     */
    private static void jsonMapTest() {
        Map<String, Scenery> sceneryMap = new HashMap<>();
        sceneryMap.put("CN10121010103A", new Scenery(NUM2, "杭州极地海洋公园", "杭州"));
        sceneryMap.put("CN10121010104A", new Scenery(NUM4, "雷峰塔", "杭州"));
        sceneryMap.put("CN10109060801A", new Scenery(NUM5, "八达岭长城", "北京"));
        Gson gson = new Gson();
        // Map对象转成json字符串使用 toJson() 方法
        String json = gson.toJson(sceneryMap);
        log.info(json);

        // json字符串转换成 map集合
        // 使用匿名内部类
        Map<String, Scenery> map = gson.fromJson(json, new TypeToken<Map<String, Scenery>>() {
        }.getType());
        log.info("" + map);
        Scenery cn10109060801A = map.get("CN10109060801A");
        log.info("" + cn10109060801A);
    }
}

三 测试结果

19:54:23.182 [main] INFO json.GsonTest - ****************************************************************
19:54:23.307 [main] INFO json.GsonTest - {"id":1,"name":"天坛公园","address":"北京"}
19:54:23.311 [main] INFO json.GsonTest - Scenery(id=1, name=天坛公园, address=北京)
19:54:23.311 [main] INFO json.GsonTest - ****************************************************************
19:54:23.314 [main] INFO json.GsonTest - [{"id":2,"name":"野人谷风景区","address":"湖北"},{"id":4,"name":"绿野山庄","address":"浙江"},{"id":5,"name":"天坛公园","address":"北京"}]
19:54:23.316 [main] INFO json.GsonTest - [Scenery(id=2, name=野人谷风景区, address=湖北), Scenery(id=4, name=绿野山庄, address=浙江), Scenery(id=5, name=天坛公园, address=北京)]
19:54:23.316 [main] INFO json.GsonTest - Scenery(id=2, name=野人谷风景区, address=湖北)
19:54:23.316 [main] INFO json.GsonTest - ****************************************************************
19:54:23.317 [main] INFO json.GsonTest - {"CN10121010103A":{"id":2,"name":"杭州极地海洋公园","address":"杭州"},"CN10121010104A":{"id":4,"name":"雷峰塔","address":"杭州"},"CN10109060801A":{"id":5,"name":"八达岭长城","address":"北京"}}
19:54:23.323 [main] INFO json.GsonTest - {CN10121010103A=Scenery(id=2, name=杭州极地海洋公园, address=杭州), CN10121010104A=Scenery(id=4, name=雷峰塔, address=杭州), CN10109060801A=Scenery(id=5, name=八达岭长城, address=北京)}
19:54:23.323 [main] INFO json.GsonTest - Scenery(id=5, name=八达岭长城, address=北京)
19:54:23.323 [main] INFO json.GsonTest - ****************************************************************

四 参考

https://blog.csdn.net/Lance_welcome/article/details/105748248

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!