jq читать файл .txt и записывать значения в файл json

Я хочу использовать jq для анализа файла .txt со списком кодов стран и записи их в значение в объекте JSON.

Вот что у меня есть до сих пор:

cat myfile.json | 
jq -R -f test_id.txt 'select(.country == []).country = "test_id.txt"' > newfile.json

Где файл .txt выглядит так:

"NSC"
"KZC"
"KCC"
"KZL"
"NZG"
"VRU"
"ESM"
"KZF"
"SFU"
"EWF"
"KQY"
"KQV"

и мой JSON выглядит так:

{
  "scsRequestId": null,
  "includeMetadata": true,
  "includeHoldings": true,
  "country": [],
  "region": [],
  "oclcSymbol": []
}

Вот ошибка, которую я получаю:

jq: error: syntax error, unexpected QQSTRING_START, expecting $end (Unix shell quoting issues?) at <top-level>, line 2:
"KZC"
jq: 1 compile error

Я хочу, чтобы список кодов стран попадал в массив стран.


person mjo    schedule 29.03.2016    source источник
comment
Есть ли причина, по которой у вас есть кавычки во входном текстовом файле? Если это не строка JSON, зачем цитировать, как если бы это было так?   -  person Charles Duffy    schedule 29.03.2016
comment
@CharlesDuffy Я так понимаю. Не по выбору. Я пытался протестировать аналогичный файл без кавычек, но это тоже не сработает. Я мог бы удалить кавычки перед обработкой с помощью jq.   -  person mjo    schedule 29.03.2016
comment
Я заметил, что ваше редактирование более свежее, чем мой ответ. Значит ли это, что ответ был основан на неправильном прочтении вопроса? [Когда я запускаю его, список действительно попадает в массив страны; переменная, являющаяся неправильным названием областей в исходной версии кода, не имеет смысла, поскольку не влияет на вывод].   -  person Charles Duffy    schedule 29.03.2016
comment
Спасибо @CharlesDuffy   -  person mjo    schedule 29.03.2016
comment
Не могли бы вы добавить к вопросу, как будет выглядеть ожидаемый результат?   -  person    schedule 29.03.2016


Ответы (1)


Аргумент -f — это файл, из которого нужно прочитать фильтр для запуска. Если вы хотите прочитать данные из файла, используйте --slurpfile, а не -f.

Таким образом:

jq --slurpfile countries test_id.txt '.country=$countries' <myfile.json >newfile.json

При запуске с предоставленными вами входными данными результирующее содержимое в newfile.json:

{
  "scsRequestId": null,
  "includeMetadata": true,
  "includeHoldings": true,
  "country": [
    "NSC",
    "KZC",
    "KCC",
    "KZL",
    "NZG",
    "VRU",
    "ESM",
    "KZF",
    "SFU",
    "EWF",
    "KQY",
    "KQV"
  ],
  "region": [],
  "oclcSymbol": []
}
person Charles Duffy    schedule 29.03.2016