記録: 468
シナリオ: Json 文字列を Java オブジェクトに変換します。Java オブジェクトのプロパティには、String、List、Map などのタイプが含まれます。
バージョン: JDK 1.8、Spring Boot 2.6.3、fastjson-2.0.33。
JSON : JavaScript オブジェクト表記法 (JavaScript オブジェクト表記法)。
JSON 構文ルール: データは名前と値のペアで構成されます。データはカンマ「,」で区切ります。文字をエスケープするにはスラッシュ \ を使用します。中括弧 { } はオブジェクトを保持します。大括弧 [] は配列 (またはリスト型) を保存し、配列には複数のオブジェクトを含めることができます。
1. JSON文字列をJSONObjectに変換する
1.1 JSON文字列
{
"cityDescribe": "宁波是港口城市",
"cityId": 2023062802,
"cityName": "宁波",
"updateTime": "2023-07-16 13:15:40"
}
1.2 変換コード
public static void f1() {
String jsonStr = "{\n" +
" \"cityDescribe\": \"宁波是港口城市\",\n" +
" \"cityId\": 2023062802,\n" +
" \"cityName\": \"宁波\",\n" +
" \"updateTime\": \"2023-07-16 13:15:40\"\n" +
"}";
System.out.println("====================f1====================");
JSONObject obj = JSON.parseObject(jsonStr);
System.out.println(obj.get("cityId"));
System.out.println(obj.get("cityName"));
System.out.println(obj.get("cityDescribe"));
System.out.println(obj.get("updateTime"));
}
2. JSON文字列をCityDtoに変換します
2.1 JSON文字列
{
"cityDescribe": "宁波是港口城市",
"cityId": 2023062802,
"cityName": "宁波",
"updateTime": "2023-07-16 13:15:40"
}
2.2 変換コード
public static void f2() {
String jsonStr = "{\n" +
" \"cityDescribe\": \"宁波是港口城市\",\n" +
" \"cityId\": 2023062802,\n" +
" \"cityName\": \"宁波\",\n" +
" \"updateTime\": \"2023-07-16 13:15:40\"\n" +
"}";
System.out.println("====================f2====================");
CityDto cityDto = JSON.parseObject(jsonStr, CityDto.class);
System.out.println(cityDto.getCityId());
System.out.println(cityDto.getCityName());
System.out.println(cityDto.getCityDescribe());
System.out.println(cityDto.getUpdateTime());
}
2.3 エンティティオブジェクト
@Data
@Builder
public class CityDto implements Serializable {
private Long cityId;
private String cityName;
private String cityDescribe;
private String updateTime;
}
3. JSON 文字列を CityObjectDto に変換すると、オブジェクト プロパティがオブジェクトになります
3.1 JSON文字列
{
"cityObj": {
"cityName": "宁波",
"updateTime": "2023-07-16 13:15:40",
"cityId": 2023062802,
"cityDescribe": "宁波是港口城市"
}
}
3.2 変換コード
public static void f3() {
String jsonStr = "{\n" +
" \"cityObj\": {\n" +
" \t\"cityName\": \"宁波\",\n" +
" \t\"updateTime\": \"2023-07-16 13:15:40\",\n" +
" \t\"cityId\": 2023062802,\n" +
" \t\"cityDescribe\": \"宁波是港口城市\"\n" +
" }\n" +
"}";
System.out.println("====================f3====================");
CityObjectDto cityDto = JSON.parseObject(jsonStr, CityObjectDto.class);
System.out.println(cityDto.getCityObj().getCityId());
System.out.println(cityDto.getCityObj().getCityName());
System.out.println(cityDto.getCityObj().getCityDescribe());
System.out.println(cityDto.getCityObj().getCityDescribe());
}
3.3 エンティティオブジェクト
@Data
@Builder
public class CityObjectDto implements Serializable {
private CityDto cityObj;
}
4. JSON文字列をMapに変換する
4.1 JSON文字列
{
"cityDescribe": "宁波是港口城市",
"cityId": 2023062802,
"cityName": "宁波",
"updateTime": "2023-07-16 13:15:40"
}
4.2 変換コード
public static void f4() {
String jsonStr = "{\n" +
" \"cityDescribe\": \"宁波是港口城市\",\n" +
" \"cityId\": 2023062802,\n" +
" \"cityName\": \"宁波\",\n" +
" \"updateTime\": \"2023-07-16 13:15:40\"\n" +
"}";
System.out.println("====================f4====================");
Map mapObj = JSON.parseObject(jsonStr, Map.class);
System.out.println(mapObj.get("cityId"));
System.out.println(mapObj.get("cityName"));
System.out.println(mapObj.get("cityDescribe"));
System.out.println(mapObj.get("updateTime"));
}
5. JSON文字列はCityMapDtoに変換され、オブジェクトのプロパティはMapタイプになります。
5.1 JSON文字列
{
"cityMap": {
"cityName": "宁波",
"updateTime": "2023-07-16 13:15:40",
"cityId": 2023062802,
"cityDescribe": "宁波是港口城市"
}
}
5.2 変換コード
public static void f5() {
String jsonStr = "{\n" +
" \"cityMap\": {\n" +
" \t\"cityName\": \"宁波\",\n" +
" \t\"updateTime\": \"2023-07-16 13:15:40\",\n" +
" \t\"cityId\": 2023062802,\n" +
" \t\"cityDescribe\": \"宁波是港口城市\"\n" +
" }\n" +
"}";
System.out.println("====================f5====================");
CityMapDto cityMapDto = JSON.parseObject(jsonStr, CityMapDto.class);
System.out.println(cityMapDto.getCityMap().get("cityId"));
System.out.println(cityMapDto.getCityMap().get("cityName"));
System.out.println(cityMapDto.getCityMap().get("cityDescribe"));
System.out.println(cityMapDto.getCityMap().get("updateTime"));
}
5.3 エンティティオブジェクト
@Data
@Builder
public class CityMapDto implements Serializable {
private Map<String, Object> cityMap;
}
6. JSON文字列をリストに変換する
6.1 JSON文字列
[{
"cityDescribe": "杭州是互联网城市",
"cityId": 2023062801,
"cityName": "杭州",
"updateTime": "2023-07-16 13:15:40"
}, {
"cityDescribe": "宁波是港口城市",
"cityId": 2023062802,
"cityName": "宁波",
"updateTime": "2023-07-16 13:15:40"
}]
6.2 変換コード
public static void f6() {
String jsonStr = "[{\n" +
"\t\"cityDescribe\": \"杭州是互联网城市\",\n" +
"\t\"cityId\": 2023062801,\n" +
"\t\"cityName\": \"杭州\",\n" +
"\t\"updateTime\": \"2023-07-16 13:15:40\"\n" +
"}, {\n" +
"\t\"cityDescribe\": \"宁波是港口城市\",\n" +
"\t\"cityId\": 2023062802,\n" +
"\t\"cityName\": \"宁波\",\n" +
"\t\"updateTime\": \"2023-07-16 13:15:40\"\n" +
"}]";
System.out.println("====================f6====================");
List<CityDto> cityList = JSON.parseArray(jsonStr, CityDto.class);
cityList.forEach((cityDto) -> {
System.out.println(cityDto.getCityId());
System.out.println(cityDto.getCityName());
System.out.println(cityDto.getCityDescribe());
System.out.println(cityDto.getUpdateTime());
}
);
}
7. JSON 文字列を CityListDto に変換すると、オブジェクト プロパティはリスト型になります。
7.1 JSON文字列
{
"cityList": [{
"cityDescribe": "杭州是互联网城市",
"cityId": 2023062801,
"cityName": "杭州",
"updateTime": "2023-07-16 13:15:40"
}, {
"cityDescribe": "宁波是港口城市",
"cityId": 2023062802,
"cityName": "宁波",
"updateTime": "2023-07-16 13:15:40"
}]
}
7.2 変換コード
public static void f7() {
String jsonStr = "{\n" +
"\t\"cityList\": [{\n" +
"\t\t\"cityDescribe\": \"杭州是互联网城市\",\n" +
"\t\t\"cityId\": 2023062801,\n" +
"\t\t\"cityName\": \"杭州\",\n" +
"\t\t\"updateTime\": \"2023-07-16 13:15:40\"\n" +
"\t}, {\n" +
"\t\t\"cityDescribe\": \"宁波是港口城市\",\n" +
"\t\t\"cityId\": 2023062802,\n" +
"\t\t\"cityName\": \"宁波\",\n" +
"\t\t\"updateTime\": \"2023-07-16 13:15:40\"\n" +
"\t}]\n" +
"}";
System.out.println("====================f7====================");
CityListDto cityListDto = JSON.parseObject(jsonStr, CityListDto.class);
List<CityDto> cityList = JSON.parseArray(cityListDto.getCityList().toString(), CityDto.class);
cityList.forEach((cityDto) -> {
System.out.println(cityDto.getCityId());
System.out.println(cityDto.getCityName());
System.out.println(cityDto.getCityDescribe());
System.out.println(cityDto.getUpdateTime());
}
);
}
7.3 エンティティオブジェクト
@Data
@Builder
public class CityListDto implements Serializable {
private List cityList;
}
8. オブジェクトとオブジェクト内のリスト型を含む複雑な JSON 文字列をプロヴィンス Dto に変換します。
8.1 JSON文字列
{
"provinceName": "浙江省",
"areaNumber": "330000",
"data": {
"dataFlag": "01",
"cityData": {
"dataList": [{
"cityDescribe": "杭州是互联网城市",
"cityId": 2023062801,
"cityName": "杭州",
"updateTime": "2023-07-16 13:15:40"
}, {
"cityDescribe": "宁波是港口城市",
"cityId": 2023062802,
"cityName": "宁波",
"updateTime": "2023-07-16 13:15:40"
}]
}
}
}
8.2 変換コード
public static void f8() {
String jsonStr = "{\n" +
"\t\"provinceName\": \"浙江省\",\n" +
"\t\"areaNumber\": \"330000\",\n" +
"\t\"data\": {\n" +
"\t\t\"dataFlag\": \"01\",\n" +
"\t\t\"cityData\": {\n" +
"\t\t\t\"dataList\": [{\n" +
"\t\t\t\t\"cityDescribe\": \"杭州是互联网城市\",\n" +
"\t\t\t\t\"cityId\": 2023062801,\n" +
"\t\t\t\t\"cityName\": \"杭州\",\n" +
"\t\t\t\t\"updateTime\": \"2023-07-16 13:15:40\"\n" +
"\t\t\t}, {\n" +
"\t\t\t\t\"cityDescribe\": \"宁波是港口城市\",\n" +
"\t\t\t\t\"cityId\": 2023062802,\n" +
"\t\t\t\t\"cityName\": \"宁波\",\n" +
"\t\t\t\t\"updateTime\": \"2023-07-16 13:15:40\"\n" +
"\t\t\t}]\n" +
"\t\t}\n" +
"\t}\n" +
"}";
System.out.println("====================f8====================");
//1.解析JSON字符串(嵌套JSON对象逐层解析)
ProvinceDto provinceDto = JSON.parseObject(jsonStr, ProvinceDto.class);
DataDto data = JSON.parseObject(provinceDto.getData().toString(), DataDto.class);
CityDataDto cityData = JSON.parseObject(data.getCityData().toString(), CityDataDto.class);
List<CityDto> dataList = JSON.parseArray(cityData.getDataList().toString(), CityDto.class);
//2.解析完成后转换为Java对象
CityDataDto cityDataResult = CityDataDto.builder()
.dataList(dataList)
.build();
DataDto dataResult = DataDto.builder()
.dataFlag(data.getDataFlag())
.cityData(cityDataResult)
.build();
ProvinceDto provinceDtoResult = ProvinceDto.builder()
.provinceName(provinceDto.getProvinceName())
.areaNumber(provinceDto.getAreaNumber())
.data(dataResult)
.build();
//3.使用Java对象
System.out.println(provinceDtoResult.getProvinceName());
System.out.println(provinceDtoResult.getAreaNumber());
DataDto dataDtoApp = (DataDto) provinceDtoResult.getData();
System.out.println(dataDtoApp.getDataFlag());
CityDataDto cityDataDtoApp = (CityDataDto) dataDtoApp.getCityData();
List<CityDto> dataListApp = (List<CityDto>) cityDataDtoApp.getDataList();
dataListApp.forEach((cityDto) -> {
System.out.println(cityDto.getCityId());
System.out.println(cityDto.getCityName());
System.out.println(cityDto.getCityDescribe());
System.out.println(cityDto.getUpdateTime());
}
);
}
8.3 エンティティオブジェクト
8.3.1 Javaオブジェクト「ProvinceDto」
(1) サンプルコード
@Data
@Builder
public class ProvinceDto<T> implements Serializable {
private String provinceName;
private String areaNumber;
private T data;
}
(2) 解析コード
プロヴィンスDtoオブジェクトは、Json文字列のprovinceName、areaNumber、およびdata属性に対応します。
8.3.2 Java オブジェクト DataDto
(1) サンプルコード
@Data
@Builder
public class DataDto<T> implements Serializable {
private String dataFlag;
private T cityData;
}
(2) 解析コード
DataDto オブジェクトは、JSON 文字列の data 属性の dataFlag 属性と cityData 属性に対応します。
8.3.3 Java オブジェクト CityDataDto
(1) サンプルコード
@Data
@Builder
public class CityDataDto<T> implements Serializable {
private T dataList;
}
(2) 解析コード
CityDataDto オブジェクトは、JSON 文字列の data プロパティの cityData プロパティの dataList プロパティに対応します。
8.3.4 Java オブジェクト CityDto
(1) サンプルコード
@Data
@Builder
public class CityDto implements Serializable {
private Long cityId;
private String cityName;
private String cityDescribe;
private String updateTime;
}
2) コードを解析する
CityDto オブジェクトは、JSON 文字列の data 属性の cityData 属性の dataList 属性の List 内のオブジェクトに対応します。
以上、ありがとうございます。
2023 年 7 月 16 日