#json #jq
#json #jq
Вопрос:
У меня есть этот объект JSON, который я хочу извлечь с помощью Jq:
{
"key_1": "uo2",
"key_2": false,
"measurements": [
{
"key_a": null,
"key_b": 37.5,
"key_c": "Value_P"
},
{
"key_a": null,
"key_b": 37.5,
"key_c": "Value_3"
},
{
"key_a": null,
"key_b": 37.5,
"key_c": "Value_001"
}
],
"key_3": "bwr",
"key_4": null,
"key_5": 31066.0
}
Теперь я хочу выбрать этот объект, если в измерениях массива есть объект, который имеет key_c==»Значение 3″, при условии, что у него нет объекта, который имеет key_c ==»Значение 4″. Следует выбрать объект выше, но не тот, что ниже.
{
"key_1": "uo2",
"key_2": false,
"measurements": [
{
"key_a": null,
"key_b": 37.5,
"key_c": "Value_4"
},
{
"key_a": null,
"key_b": 37.5,
"key_c": "Value_P"
},
{
"key_a": null,
"key_b": 37.5,
"key_c": "Value_3"
},
{
"key_a": null,
"key_b": 37.5,
"key_c": "Value_001"
}
],
"key_3": "bwr",
"key_4": null,
"key_5": 31066.0
}
Измерения массива могут быть любой длины и не сортируются.
Спасибо
Ответ №1:
Я бы предложил фильтр, подобный этому
def condition1: any(.key_c == "Value_3");
def condition2: any(.key_c == "Value_4") | not;
select(.measurements|condition1 and condition2)
Ответ №2:
Как сжатый однострочный:
select(.measurements|any(.key_c=="Value_3") and all(.key_c!="Value_4"))