Сообщение об ошибке «Невозможно проиндексировать массив со строкой« Заголовок »» при анализе данных JSON с помощью jq

Если вам нужен графический инструмент, я бы предложил K3b .

Если вам нужна утилита командной строки, отличная от dd , вы можете вместо этого взглянуть на mkisofs .

8
17.03.2019, 20:40
1 ответ

Вы не получаете 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, чтобы вместо этого получить вывод, разделенный табуляцией -.

14
27.01.2020, 20:11

Теги

Похожие вопросы