Вы не получаете Cannot index array with string "Title"
с этой командой, вы получаете
[
"abc",
"xyz",
null,
null
]
так как в объектах массива contents
нет ключа characteristics
или value
(, они являются ключами в массиве .details.Temperature
под-).
Команда, которую должен был передать вам, это сообщение:
jq -r '.[] | [.Title,.brand,.characteristics,.value]' "$jsonfile"
или
jq -r '.content | [.Title,.brand,.characteristics,.value]' "$jsonfile"
Отсутствие поиска по ключу content
или невозможность получить элементы массива content
приводит к получению массива из одного объекта, а не самого объекта. И вы не можете индексировать массив строкой.
Предполагается, что вы хотите выводить CSV:
$ jq -r '.content[] |.details.Temperature[] as $t | [.Title,.brand,$t.value,$t.characteristics] | @csv' file.json
"abc","xyz","90","Normal"
"abc","xyz","100","high"
"abc","xyz","80","low"
<object(s)> as <variable>
действует как цикл в jq
, так что здесь происходит то, что $t
будет присваиваться каждому элементу .details.Temperature[]
по очереди, и для каждого элемента создается новый массив. Массив передается через @csv
, который выводит строки в формате CSV -.
jq
всегда будет заключать в двойные кавычки поля вывода в формате CSV. Чтобы избавиться от ненужных кавычек:
jq -r '...as above...' file.json | csvformat
(csvformat
является частьюcsvkit
)
Или вы можете использовать @tsv
вместо @csv
, чтобы вместо этого получить вывод, разделенный табуляцией -.