Jackson JSON API:查找字符串中出现的所有键

时间:2016-01-26 21:04:28

标签: java json jackson

我已经暂时使用了杰克逊,所以我对它很熟悉,但已经有一段时间了,我发现自己面临一个小问题,我觉得应该比我看到的更简单,但我可能错了。

我在Java中有一个JSON字符串。我需要在该字符串中找到所有出现的特定键。此键可以在许多位置弹出,可以是根对象,子对象,也可以是知道嵌套多少的对象数组。基本上,我需要找到此键的所有实例(以及值),重命名键,并更改值。根据字符串的不同,该密钥也可能根本不存在。

基本上,我需要找到关键字“a”,但我可以拥有以下任何一项:

public void onClick(View v){
     switch(v.getId()){
         case R.id.text1: //textview with id text1 was clicked
     }
}

你明白了。该结构具有一些可变性,但在所有情况下,我需要找到此键的所有(如果有)出现并进行所需的更改。有一个简单的方法吗?简而言之,我知道我可以这样做:

{b: 3, c: [{a: 0},{a: 7}]}
{a: 5, c: [], f: {a: 12}}

根据需要迭代Map,typechecking,recursing等,但这似乎是一个过多的代码。我知道我可以用Map<String, Object> map = objectMapper.readValue(...); 做类似的事情,但后来我会做一个非常类似的操作(类型检查,迭代,递归),可能只需少一点代码,但仍然很笨重。我觉得应该有一个更简单的方法,但也许我错了。

1 个答案:

答案 0 :(得分:0)

我猜你正在寻找的可能是JsonNode中的一种方法:

  • findValues()
  • findValuesAsText()
  • findParents(...)

这是使用给定字段名称查找字段值的所有细微变化;返回JsonNode s列表(第一个和第三个)或字符串列表(第二个)。