2

I would like to take a JsonNode tree and update each of the values. Can this be done with a lambda expression?

{
    "resource": {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"
    }
}

I am trying to use the following logic:

JsonNode json = new ObjectMapper().readTree(new ObjectMapper().writeValueAsString(myObject));

ObjectNode rootNode = (ObjectNode) json;
ObjectNode resourceNode = (ObjectNode) rootNode.path("resource");

//Psuedo Code here
resourceNode.forEach(node -> node.value = myFunc(node.value));

Thanks in advance!

sreisman
  • 658
  • 3
  • 9
  • 24

2 Answers2

4

Use .fields() to iterate over the key/value pairs:

resourceNode.fields().forEachRemaining(
    entry -> resourceNode.set(
        entry.getKey(),
        func(entry.getValue())
    )
);
4castle
  • 32,613
  • 11
  • 69
  • 106
1

Actually you can do that:

resourceNode.fieldNames().forEachRemaining(
      s -> resourceNode.set(s, new TextNode(func(resourceNode.get(s).asText())))
);
Andremoniy
  • 34,031
  • 20
  • 135
  • 241