我正在尝试将 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 检索它。
您需要将数据解析为
Map<String, CityData>
,而不是包含 Map 属性的对象。您的根级别是地图。
Map<String, CityData> parsed = objectMapper.readValue(
input,
new TypeReference<Map<String, CityData>>() {});