@uristsoapmaker

JsonPath — как вытащить значения из Json, кроме определённых?

Здравствуйте.
Есть такой Json:
[
{
"accID": "3asdasd321asdasdfsadf2",
"test": "one",
"isGood": "true",
},
{
"accID": "Not Found",
"test": "two",
"isGood": "true",
},
{
"accID": "1asdasd121asdasdfsadf5",
"test": "five",
"isGood": "false",
}
]


Я хочу получить все значения accID, но без 'Not Found', вот так:
[
"3asdasd321asdasdfsadf2",
"1asdasd121asdasdfsadf5"
]


Никак не пойму как фильтр настроить.
.accID - возвращает все значения нормально.
$.[?(@.accID != 'Not Found')] - вот этот вот возвращает тот же самый Json, но без секций, содержащих 'Not Found'
$.accID[?(@.accID != 'Not Found')] - такое вот не работает.
Как мне настроить фильтр, чтобы получить нужный результат без 'Not Found'?

Помогите, пожалуйста, я уже замучался.
  • Вопрос задан
  • 658 просмотров
Решения вопроса 1
jsonContext = JsonPath.parse(jsonString);

		List<String> data = jsonContext.read("$.[?(@.acc != 'Not Found')].acc");
		assertThat(data, notNullValue());
		assertThat(data.size(), greaterThan(0));
		System.err.println("Results: " + data);

дает
Results: ["3asdasd321asdasdfsadf2","1asdasd121asdasdfsadf5"]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@sunsexsurf
IT & creative
1/ dict внутри list правильно?
попробуйте разложить цикл на шаги:

a= your list
# так как это список, нам нужно посмотреть все элементы в списке
# в вашем случае, элементы - это словарь (ну или json - не важно)
for i in a: 
    if i['accID'] != 'Not Found':
        print(i['accID'])

# в одну строку
print(list(i['accID'] for i in a if i['accID'] != 'Not Found'))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы