我需要获取 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 行中无效”错误
那可能吗 ?
谢谢
您需要首先对号召性用语进行 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)
| 归档时间: |
|
| 查看次数: |
4644 次 |
| 最近记录: |