jq - перебирать словари - PullRequest
       24

jq - перебирать словари

1 голос
/ 04 февраля 2020

Мои json знания шатки, поэтому извините, если я использую неправильную терминологию.

У меня есть input.txt, что можно упростить до:

[
  {
    "foo1": "bar1",
    "baz1": "fizz1"
  },
  {
    "foo2": "bar2",
    "baz2": "fizz2"
  }
]

I Я хочу перебрать каждый объект с помощью al oop, поэтому я, в сущности, надеюсь сначала заняться 1, затем l oop через 2, et c.

Я думал, что это было что-то вроде:

jq 'keys[]' input.json | while read key ; do
    echo "loop --$(jq "[$key]" input.json)"
done

, но это дает мне

loop 0
loop 1

, где я ожидал бы увидеть (интервал здесь не обязателен, не знаю как jq разобрал бы это):

loop { "foo1": "bar1", "baz1": "fizz1" }
loop { "foo2": "bar2", "baz2": "fizz2" }

Что мне не хватает?

Ответы [ 3 ]

3 голосов
/ 04 февраля 2020

Не нужно использовать bash, вы можете сделать это в jq:

jq -r 'keys[] as $k | "loop: \(.[$k])"' file.json

loop: {"foo1":"bar1","baz1":"fizz1"}
loop: {"foo2":"bar2","baz2":"fizz2"}
2 голосов
/ 04 февраля 2020

Как насчет использования опции -c:

$ jq -c '.[]' file | sed 's/^/loop /'
loop {"foo1":"bar1","baz1":"fizz1"}
loop {"foo2":"bar2","baz2":"fizz2"}
1 голос
/ 04 февраля 2020

Предположим, response - это переменная, содержащая ваши данные:

echo "$response" | jq --raw-output '.[] | "loop " + tostring'
loop {"foo1":"bar1","baz1":"fizz1"}
loop {"foo2":"bar2","baz2":"fizz2"}

Надеюсь, это поможет!

...