如何使用 tsv 中的数组转换 JSON,并使用 jq 保留数组结构?

gli*_*ker 2 csv json jq

我需要获取 mysql 表的内容,该表具有一些将数据存储为 JSON 数组的字段,并将其提取到另一个数据库表中。我需要为此使用 REST API,它会返回 JSON 格式的记录。出于性能原因,我需要该输出为选项卡选项卡返回。因此我使用jq的@tsv。

这非常有效,直到它遇到一个内部有 JSON 数组的字段,然后 jq 抱怨“数组在 csv 行中无效”。

这是一个 JSON 示例

{
"records": [
 {
        "id": 1,
        "metadata": {
            "description": null,
            "width": 0,
            "height": 0,
            "secondaryColor": "#fff",
            "callToAction": [
                {
                    "link": "/truc.html",
                    "value": "nice",
                    "colors": {
                        "primary": "transparent;",
                        "secondary": "transparent;"
                    }
                }
            ]
        },
        "parent": null
    }
        ]
}
Run Code Online (Sandbox Code Playgroud)

我想要以下结果

1  null  0  0  #fff  [ { "link": "/truc.html", "value": "nice", "colors": { "primary": "transparent;", "secondary": "transparent;" } } ]  null
Run Code Online (Sandbox Code Playgroud)

所以基本上我希望数组完好无损,但只是在一行中返回

所以我写了这个

jq -c --raw-output '.records[]|[.id,.metadata.description,.metadata.width,.metadata.height,.metadata.secondaryColor,.metadata.callToAction,.parent]|@tsv
Run Code Online (Sandbox Code Playgroud)

但我有“数组在 csv 行中无效”错误

那可能吗 ?

谢谢

che*_*ner 5

您需要首先对号召性用语进行 JSON 编码。

% jq -c --raw-output '.records[] |
[.id, .metadata.description, 
      .metadata.width,
      .metadata.height,
      .metadata.secondaryColor,
      (.metadata.callToAction|@json),  # convert this field to JSON first
      .parent
] | @tsv' tmp.json
1       0   0   #fff    [{"link":"/truc.html","value":"nice","colors":{"primary":"transparent;","secondary":"transparent;"}}]
Run Code Online (Sandbox Code Playgroud)