2016-01-26 59 views
-1

我已經使用了Jackson一段時間,所以我熟悉它,但它已經有一段時間了,我發現自己面臨一個小問題我覺得應該比我所看到的更簡單,但我可能是錯的。Jackson JSON API:找到所有出現的字符串中的鍵

我在Java中有一個JSON字符串。我需要在該字符串中查找所有出現的特定鍵。這個鍵可以在許多地方彈出,無論是在根對象,子對象還是有誰知道有多少嵌套的對象數組中。基本上,我需要找到此鍵的所有實例(以及值),重命名鍵並更改值。根據字符串的不同,這個鍵也可能根本不存在。

基本上,我需要找到關鍵的「一」,但我可以有以下任何一項:

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

你的想法。結構有一些變化,但在任何情況下,我都需要找到所有(如果有的話)這個關鍵字並進行必要的修改。有沒有簡單的方法來做到這一點?概括地說,我知道我可以做這樣的事情:

Map<String, Object> map = objectMapper.readValue(...); 

並通過根據需要地圖,類型檢查,遞歸等迭代,但似乎是代碼過量此。我知道我可以用ObjectMapper.readTree()做類似的事情,但是我會做類似的操作(類型檢查,迭代,遞歸),也許代碼少一些,但仍然很笨重。我覺得應該有一個更簡單的方法,但也許我錯了。

+0

那麼,你有什麼嘗試(告訴我們),你有什麼問題呢? – Andreas

+0

我知道我可以嘗試ObjectMapper.readValue()來獲取一個Map ,但是我必須遍歷它,類型檢查,遞歸通過子對象/數組等,這似乎是一個過度的一團代碼爲此。我可以使用ObjectMapper.readTree(),但JsonNode.get()是有限的,我仍然需要根據需要迭代/遞歸節點。也許這就是它的原因吧,但我希望能更簡潔一些。 – user1017413

+0

然後看到這個問題:[是否存在與XQuery/XPath相當的JSON?](http://stackoverflow.com/questions/8481380/is-there-a-json-equivalent-of-xquery-xpath) – Andreas

回答

0

我猜測你正在尋找可能的方法之一JsonNode

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

這些都是發現價值的微小變化具有給定字段名稱的字段;返回列表JsonNode(第一個和第三個),或列表(第二個)。

相關問題