On Fri, Jun 19, 2020 at 10:56 AM nU8K <[email protected]> wrote:
>
> anyway, here's the answer of "What's the difference between "get" and "with" 
> function", just check the source code implementation.

Actually I would suggest looking at Javadocs (either from sources), or
if using IDE just look at definition.

There is also `path()` that is distinct from `get()`, as well as
`with()`, but `with()` is meant when changing things: it guarantees
that path you have will exist in `ObjectNode` / `ArrayNode` (fails for
other nodes).

So, you can do, for example:

ObjectNode root = mapper.createObjectNode();
root.with("branch").with("leaf").put("value", 42);

and now ObjectNode structure describes

{
  "branch" : {
     "leaf" : {
        "value" : 42
     }
  }
}

conversely, `path()` allows traversal through "missing" nodes without
error: for missing nodes, there will
be `MissingNode` instance that never resolves to anything. So you can call

JsonNode root = mapper.readTree(source);
JsonNode maybeValue = root.path("branch").path("leaf").path("value");
assertTrue(maybeValue.isMissingValue());

even if incoming JSON was

 { }

whereas trying to use `get()` would give a NullPointerException (since
`node.get("property") returns `null` if no such property exists).
There is also convenience alternative `at()` which takes `JsonPointer`
for simpler access:

JsonNode maybeValue = root.at("/branch/leaf/value");

I hope this helps,

-+ Tatu  +-

>
> ```java
> @Override
> public JsonNode get(String fieldName) {
> return _children.get(fieldName);
> }
>
> @Override
> public ObjectNode with(String propertyName) {
> JsonNode n = _children.get(propertyName);
> if (n != null) {
> if (n instanceof ObjectNode) {
> return (ObjectNode) n;
> }
> throw new UnsupportedOperationException("Property '" + propertyName
> + "' has value that is not of type ObjectNode (but " + n
> .getClass().getName() + ")");
> }
> ObjectNode result = objectNode();
> _children.put(propertyName, result);
> return result;
> }
> ```
>
> --
> You received this message because you are subscribed to the Google Groups 
> "jackson-user" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/jackson-user/fe8fd7af-a8df-4a56-8e44-b5d1906cd118n%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jackson-user/CAL4a10geRT9hYB76pGPR5aiJ3DyHfijgemB0Ebs9xW7ug1%2B7ig%40mail.gmail.com.

Reply via email to