JQ ошибка "объект недопустим в строке CSV" - PullRequest
2 голосов
/ 17 января 2020

Я использую jq для преобразования вложенного файла .json в .csv, однако возникает проблема, когда у меня есть конкретный ключ , значение в пределах JSON. Используемый мной сценарий взят из этого ответа , который работает, если я исключу одну строку из входного файла.

ОШИБКА :

jq: error (at example.json:0): object ({"favicon":...) is not valid in a csv row

Сообщение об ошибке не очень наглядно, поскольку упоминаемый объект не является виновником.

json2csv.jq

paths as $path
| {path: $path, value: getpath($path)}
| select(.value|type == "object" )
| select( [.value[]][0] | type != "object")
| .path + ([.value[]])
| @csv

пример. json (который проверяется с помощью https://jsonlint.com):

{
  "items": [
    {
      "id": 1234,
      "title": "Title of Item",
      "internet": {
        "favicon": "https://example.com/icon.png",
        "domain": "https://example.com"
      },
      "image": {
        "gif": null,
        "main": "https://example.com/image_large.png"
      },
      "description": {
        "origin": null,
        "resource": null
      },
      "referral": {
        "owner": null,
        "name": null
      },
      "url": "https://example.com/image.png?version=1"
    }
  ],
  "other": {
    "data": 0,
    "notes": 1,
    "total": 1,
    "misc": 1
  }
}

Удаление следующего из JSON не ' t throw error from jq:

, "url": "https://example.com/image.png?version=1"

Invocation :

$ jq -er -f json2csv.jq example.json

Я не могу действительно изменить файл .json, потому что ему нужен проблематично c line, поэтому ищу решение от jq.

1 Ответ

2 голосов
/ 18 января 2020

И @tsv, и @csv требуют, чтобы их входы были плоскими массивами (т. Е. Массивами значений атомов c). Есть много (бесконечно много?) Способов «сгладить» объекты и массивы, поэтому, не зная чего-либо о том, что вы ожидаете, я бы просто угадал.

Если вы хотите дикие догадки, замените .path + [.value[]] на

.path + [.value[]|tostring]

По крайней мере, это всегда будет работать (при условии, что ввод действителен JSON) при создании простого для чтения результаты.

...