使用可变键定义POJO

问题描述 投票:0回答:1

我正在尝试将 JSON 转换为 POJO,其中键是可变的。例如:以下示例中的柏林、巴黎:

{
  "Berlin": {
    "en-US": {
      "displayName": "US",
      "supportedLanguage": [
        "US"
      ],
      "FullExample": "Hello us"
    },
    "en-CA": {
      "displayName": "CA",
      "supportedLanguage": [
        "CA"
      ],
      "FullExample": "Hello CA"
    }
  },
  "Paris": {
    "en-US": {
      "displayName": "US",
      "supportedLanguage": [
        "US"
      ],
      "FullExample": "Hello US"
    },
    "en-CA": {
      "displayName": "CA",
      "supportedLanguage": [
        "CA"
      ],
      "FullExample": "Hello CA"
    }
  }
}

对于变量键(柏林、巴黎)内的所有内容,例如:

    "en-US": {
      "displayName": "US",
      "supportedLanguage": [
        "US"
      ],
      "FullExample": "Hello us"
    },
    "en-CA": {
      "displayName": "CA",
      "supportedLanguage": [
        "CA"
      ],
      "FullExample": "Hello CA"
    }

我将类定义如下:

class CityData {

Map <String, LanguageData> locale;
}

class LanguageData {
String displayName;
List<String> supportedLanguage;
String fullExample;
}

最后为了适应variableKeys,我定义了一个新对象,如下所示:

class City {

Map<String, CityData> city;

}

但是,我收到以下错误:

Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Berlin" , not marked as ignorable (0 known properties: ])

如何将变量键存储在 POJO 中?这是必不可少的东西,所以我想通过 jackson objectmapper readValue 检索它。

java json jackson pojo
1个回答
0
投票

您需要将数据解析为

Map<String, CityData>
,而不是包含 Map 属性的对象。您的根级别是地图。

Map<String, CityData> parsed = objectMapper.readValue(
  input,
  new TypeReference<Map<String, CityData>>() {});
© www.soinside.com 2019 - 2024. All rights reserved.