Как использовать JQ для запроса, где ключ является числовой строкой - PullRequest
0 голосов
/ 22 сентября 2018

Недавно обнаружен jq и я использую его для форматирования некоторых данных.

Как использовать его для доступа к полям объекта json, которые оказались числовыми строками?

Напримерследующее не дает мне с ошибкой:

echo '{"20":"twenty"}' | jq .["20"]

Какой правильный способ сделать это?

1 Ответ

0 голосов
/ 23 сентября 2018

Немедленный ответ: использовать дополнительные кавычки

В jq .["20"] двойные кавычки анализируются как синтаксис оболочки, а не как jq синтаксис (цитирование оболочки является посимвольным: в кавычках можно переключать типы внутрибольшая строка).Используйте одинарные кавычки, чтобы защитить всю строку от модификации оболочкой:

$ echo '{"20":"twenty"}' | jq '.["20"]'
"twenty"

Поиск проблемы самостоятельно

Один из подходов к диагностике такого рода проблем - использование оболочки xtrace средство, чтобы сказать оболочке, чтобы она возвращала вам командные строки:

$ set -x
$ echo '{"20":"twenty"}' | jq .["20"]
+ echo '{"20":"twenty"}'
+ jq '.[20]'
jq: error (at <stdin>:1): Cannot index object with number

Как видите, jq .["20"] был проанализирован как идентичный jq '.[20]'

...