【发布时间】:2016-01-26 21:04:27
【问题描述】:
我已经断断续续地使用 Jackson 有一段时间了,所以我对它很熟悉,但已经有一段时间了,我发现自己面临一个小问题,我觉得应该比我所看到的更简单,但我可能是错的。
我在 Java 中有一个 JSON 字符串。我需要在该字符串中找到所有出现的特定键。该键可能会在多个位置弹出,无论是在根对象、子对象还是在知道嵌套多少的对象数组中。基本上,我需要找到这个键的所有实例(连同值),重命名键,然后更改值。也有可能这个键根本不存在,具体取决于字符串。
基本上,我需要找到键“a”,但我可以有以下任何一种:
{b: 3, c: [{a: 0},{a: 7}]}
{a: 5, c: [], f: {a: 12}}
你明白了。该结构有一些可变性,但在所有情况下,我都需要找到该键的所有(如果有)出现并进行所需的更改。有没有一种简单的方法可以做到这一点?简而言之,我知道我可以这样做:
Map<String, Object> map = objectMapper.readValue(...);
并根据需要遍历 Map、类型检查、递归等,但这似乎是过多的代码。我知道我可以用ObjectMapper.readTree() 做类似的事情,但是我会做一个非常相似的操作(类型检查、迭代、递归),也许代码少一点,但仍然很笨重。我觉得应该有一个更简单的方法,但也许我弄错了。
【问题讨论】:
-
那么,您尝试了什么(向我们展示),您遇到了什么问题?
-
我知道我可以尝试 ObjectMapper.readValue() 来获取 Map
,但是我必须遍历它、类型检查、递归子对象/数组等,这似乎是过多的代码。我可以使用 ObjectMapper.readTree(),但 JsonNode.get() 是有限的,我仍然需要根据需要迭代/递归节点。也许这就是它必须的样子,但我希望能更简洁一些。