Как перейти к JSON с помощью JSONPath?

#java #json #kotlin #jsonpath

Вопрос:

Я ищу способ детализации объекта JSON с помощью JSONPath.

У меня есть следующий JSON:

 {  "SomeObject": {  "SomeProperty": "someValue"  } }  

Я хочу иметь возможность сделать что-то подобное этому:

 JsonPath.parse(json)  .readlt;NeedSomeKindOfTypeHeregt;("$.SomeObject")  .set("$.SomeProperty", "newValue")  .readlt;Stringgt;("$.SomeProperty") // should return "newValue" and cannot drill down from here  

Конечно, я могу сделать это в двух отдельных строках с полным путем "$.SomeObject.SomeProperty" , но я специально хочу знать, возможна ли такая детализация.

Изменить: Метод синтаксического анализа возвращает объект DocumentContext текущего узла json. Я ищу способ получить другой DocumentContext, но для дочернего узла. Я могу сделать что-то вроде:

 JsonPath.parse(JsonPath.parse(json).readlt;JsonNodegt;("$.SomeObject")).readlt;Stringgt;("$.SomeProperty")  

Это сработало бы, но я ищу более элегантный способ, желательно без повторного анализа. Я мог бы даже определить метод расширения:

 private fun lt;Tgt; JsonNode.read(jsonPath: String): T {  return JsonPath.parse(this).read(jsonPath) }  

чтобы сделать более лаконичным:

 JsonPath.parse(json).readlt;JsonNodegt;("$.SomeObject").readlt;Stringgt;("$.SomeProperty")  

Но для этого все равно требуется выполнить синтаксический анализ дважды.