我需要获取mysql表的内容,该表具有一些将数据存储为JSON数组的字段,并将其提取到另一个数据库表中。我需要为此使用REST API,并且它以JSON返回记录。出于性能原因,我需要将该输出作为Tab选项卡返回。因此,我使用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
}
]
}
我想要以下结果
1 null 0 0 #fff [ { "link": "/truc.html", "value": "nice", "colors": { "primary": "transparent;", "secondary": "transparent;" } } ] null
所以基本上我希望数组是完整的,但只返回一行
所以我写了这个
jq -c --raw-output '.records[]|[.id,.metadata.description,.metadata.width,.metadata.height,.metadata.secondaryColor,.metadata.callToAction,.parent]|@tsv
但是我有“ csv行中的数组无效”错误
有可能吗?
谢谢
答案 0 :(得分:1)
您需要先对号召性用语进行JSON编码。
(void *) -1
答案 1 :(得分:0)
由于所述目标在输出中包括“ null”,因此您可能要考虑使用tojson
映射所有选定的值,例如使用map(tojson)
。使用示例JSON,将产生:
1 null 0 0 "#fff" [{"link":"/truc.html","value":"nice","colors":{"primary":"transparent;","secondary":"transparent;"}}] null
不过,请注意,引用了字符串#fff
。如果您不希望以这种方式对字符串加引号,则不妨考虑:
map(if type == "string" then . else tojson end)