【发布时间】:2019-11-05 20:07:13
【问题描述】:
我有一个 JSON 文件(它包含一个 JSON 对象数组。)
我正在尝试逐个对象地阅读它。
我需要将每个对象转换为LinkedHashMap<String,String>,其中键和值都是字符串。请注意,即使 JSON 对象包含非字符串值 (Integer/Boolean),我也希望我的 LinkedHashMap 包含字符串。
这是我的 JSON 文件 (films.json):
[
{
"name": "Fight Club",
"year": 1999,
}
]
现在,这有 1 个对象。我想将其转换为LinkedHashMap<String,String>。
所以对于上面的例子,我的LinkedHashMap 应该包含(对于第一个 JSON 对象):
“名称”:“战斗俱乐部”
“年”:“1999”
注意LinkedHashMap 中的年份是String 而不是Integer。
这是我尝试过的。
Map<String, Object> myLinkedHashMap;
JsonParser jsonParser = new JsonFactory().createParser(new File("films.json"));
jsonParser = new JsonFactory().createParser(new File(filePath));
jsonParser.nextToken();
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
while(jsonParser.nextToken() != JsonToken.END_ARRAY){
myLinkedHashMap = mapper.readValue(jsonParser, LinkedHashMap.class);
}
变量 myLinkedHashMap 将包含我的 JSON 文件中对象的键/值对。
但问题是,对于 JSON 文件的“年份”,我在 LinkedHashMap 中获取 Integer,因为 JSON 文件也包含 Integer。
相反,我希望 Integer 在 LinkedHashMap 中作为 String。
请帮我在LinkedHashMap 中获取String 而不是Integer。
注意:该解决方案也应该适用于其他数据类型。
所以如果 JSON 对象包含布尔值 true,那么我的 LinkedHashMap 应该包含 "true"。
【问题讨论】:
-
为什么不在使用时调用
toString,toString将返回String -
@Deadpool 代码是紧密耦合的,不能在那里进行更改
-
如果你可以定义自定义类,你可以这样做
标签: java json jackson objectmapper