Выбор подмножества свойств и значений JSON с помощью JSONPath

Учитывая JSON, например:

{
  "a":1,
  "b":2,
  "c":3,
  "d":4,
  "e":5
}

Как я могу выбрать b, d и e, чтобы получить следующий JSON?

{
  "b":2,
  "d":4,
  "e":5
}

Мне нужен объект JSON, а НЕ только значения 2, 4 и 5?

Это то, с чем я пытаюсь и терплю неудачу:

$.[b,d,e]

person user3139545    schedule 13.10.2016    source источник
comment
JSONPath для этого не подходит.   -  person cassiomolin    schedule 13.10.2016
comment
Возможный дубликат Извлечение подмножества атрибутов с помощью JSONPath   -  person Vadzim    schedule 04.06.2019


Ответы (4)


JSONPath не подходит для того, чего вы пытаетесь достичь: JSONPath предназначен для выбора значений, а не пар ключ-значение. То, что вы хотите, может быть достигнуто с помощью Jackson или любого парсера JSON для Java.

Если вы хотите пойти на Джексона, вот код, который поможет:

String json = "{\"a\":1,\"b\":2,\"c\":3,\"d\":4,\"e\":5}";

ObjectMapper mapper = new ObjectMapper();
JsonNode tree = mapper.readTree(json);

ObjectNode node = mapper.createObjectNode();
node.set("b", tree.get("b"));
node.set("d", tree.get("d"));
node.set("e", tree.get("e"));

String result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(node);
person cassiomolin    schedule 13.10.2016

Элементы должны быть в одинарных кавычках.

$.['b','d','e']

Отлично работает для JsonPath из com.jayway.jsonpath:json-path:2.4.0

person Javanshir Yolchiyev    schedule 25.09.2019

Ваш путь json правильный, а json сам по себе нет. Так должно быть:

{
"a":1,
"b":2,
"c":3,
"d":4,
"e":5
}

Кстати, для этих целей есть хорошие онлайн-ресурсы для тестирования: http://jsonpath.com/

person Andremoniy    schedule 13.10.2016
comment
Используя данный пример и вашу ссылку, вывод будет ``` [ 2, 4, 5 ] ``` - person LukeG; 15.07.2020

Вам нужно изменить свой JSON на (как сказал Андремоний)

{
"a":1,
"b":2,
"c":3,
"d":4,
"e":5
}

и для выбора b,d,e используйте это

$.b,d,e
person Sid    schedule 13.10.2016