2016-10-13 8 views
2

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

{ 
    "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] 
+0

JSONPath не подходит для этого. –

ответ

2

JSONPath не подходит для wha Вы пытаетесь достичь: 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); 
1

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

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

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

+0

Я обновил вопрос, чтобы лучше показать, что я хочу – user3139545

0

Вы должны изменить свой JSON, чтобы (как сказал Andremoniy)

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

и выбрать b, d, e использовать это

$.b,d,e 
+0

Я обновил вопрос, чтобы лучше показать, что я хочу – user3139545