Json 文字列を Java オブジェクトおよびアプリケーションに変換します (fastjson ツール クラスを使用)

記録: 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 日

おすすめ

転載: blog.csdn.net/zhangbeizhen18/article/details/131751182