#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")
Но для этого все равно требуется выполнить синтаксический анализ дважды.