一 点睛
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
来源:oschina
链接:https://my.oschina.net/u/4297704/blog/4256578