#json #csv #jq
#json #csv #jq
Вопрос:
Я пытаюсь использовать JQ для обработки CSV, подобного этому, в котором нет заголовков столбцов:
cat "input.csv"
"12345678901234567890","2019-03-19",12
Есть ли более элегантный и читаемый способ удалить экранированные кавычки для первого и второго полей — и в целом, для построения потока объектов с учетом такого ввода?
В идеале я хотел бы иметь повторно используемый скрипт, который создает JSON из artbitrary CSV, учитывая файл и список полей в нем, передаваемых в качестве аргумента командной строки.
Текущий сценарий JQ и выходные данные:
cat "input.csv" |
jq
--raw-input '
. |
split("n") |
map( split(",")) |
.[0] |
{
ID: (.[0] | fromjson),
date: (.[1] | fromjson),
count: (.[2] | tonumber)
}'
{
"ID": "12345678901234567890",
"date": "2019-03-19",
"count": 1
}
Вывод того же скрипта без | fromjson
использования, который приводит к кавычкам, которых я хотел бы избежать:
{
"ID": ""12345678901234567890"",
"date": ""2019-03-19"",
"count": 1
}
Ответ №1:
Ваш вызов jq может быть упрощен до:
jq -R '
split(",")
| map(fromjson)
| {ID: .[0], date: .[1], count: .[2] }'
Общее решение
jq -R --argjson header '["ID", "date", "count"]' '
split(",")
| map(fromjson)
| [ $header, . ]
| transpose
| reduce .[] as $kv ({}; .[$kv[0]] =$kv[1]) '
Если вы хотите указать заголовки в файле, вместо этого используйте --argfile
параметр командной строки.