ссылочный ключевой регистр нечувствителен - PullRequest
1 голос
/ 17 июня 2020

Как я могу express указать ссылку на простой ключ без учета регистра в jq?

Например, я могу иметь:

{
  "key" : "value"
}

или

{
  "kEy" : "value"
}

, но не

{
  "key" : "value",
  "kEy" : "value"
}

Есть ли способ express фильтр .key, чтобы он ловил "key" или "kEy"?

Ответы [ 2 ]

3 голосов
/ 17 июня 2020

Одним из способов было бы преобразовать все клавиши в нижний регистр в качестве формата по умолчанию и извлечь имя клавиши по вашему выбору (на основе этого ответа пика )

with_entries( .key |= ascii_downcase ).key

.key внутри with_entries(..) не следует путать с именем клавиши по вашему выбору, потому что это имя по умолчанию для всех имен клавиш при использовании семейства * функций записей в jq - with_entries, to_entries и from_entries

Если ваши ключи вложены внутри других объектов, можно было бы walk через весь JSON рекурсивно переименовать ключи и получить поле по вашему выбору

def recursive_key_rename:
  walk( if type == "object" then with_entries( .key |= ascii_downcase ) else . end);

recursive_key_rename | .key.anotherkey

См. демонстрация jq-play

3 голосов
/ 17 июня 2020

Учитывая флаг i, встроенная команда test выполняет поиск без учета регистра, вы можете использовать ее вместе с to_entries. Например:

to_entries[] | select(.key | test("key"; "i")) .value

Онлайн-демонстрация

...