如何使用jq打印由制表符“”分隔的JSON数组元素

问题描述 投票:0回答:1

我正在尝试使用

.import
函数将 json 文档导入到 sqlite3 数据库中。据我所知, sqlite3 .import 期望 JSON 数据每行一行,项目数与表列匹配,并用
.separate
分隔。

如果我定义了

.separator="\t"
,我尝试使用 jq 创建一个重新格式化的 json 文件,但出现错误。

这是我的测试

$echo '[{"a1":{"b1":1,"c1":{"c1":"test","c2":null}}},{"a2":{"b2":1,"c":{"c2":"test","c2":null}}}]' | jq -c '.[] | to_entries'

[{"key":"a1","value":{"b1":1,"c1":{"c1":"test","c2":null}}}]
[{"key":"a2","value":{"b2":1,"c":{"c2":null}}}]

我的目标是创建以下制表符分隔行(下面表示制表符

\x09

"a1"\t{"b1":1,"c1":{"c1":"test","c2":null}}
"a2"\t{"b2":1,"c":{"c2":null}}

但我单独使用 jq 未能实现这种格式。 我可以用换行符将其分开

$echo '[{"a1":{"b1":1,"c1":{"c1":"test","c2":null}}},{"a2":{"b2":1,"c":{"c2":"test","c2":null}}}]' | jq -c '.[] | to_entries |.[] | [.key, .value] | .[]'
"a1"
{"b1":1,"c1":{"c1":"test","c2":null}}
"a2"
{"b2":1,"c":{"c2":null}}

但是如果我使用 join(" "),它会抱怨它无法将字符串与对象连接

echo '[{"a1":{"b1":1,"c1":{"c1":"test","c2":null}}},{"a2":{"b2":1,"c":{"c2":"test","c2":null}}}]' | jq -c '.[] | to_entries | .[] | [.key, .value] | join("\t")'
jq: error (at <stdin>:1): string ("a1\t") and object ({"b1":1,"c1...) cannot be added

我可以使用 perl 或 sed 来后处理换行符分隔的文本以获得我想要的内容,但我希望学习如何使用

jq
正确地执行此操作。

这可能吗?

json unix command-line jq text-processing
1个回答
0
投票

最简单的方法是使用字符串插值

… | jq -r '.[] | to_entries[] | "\(.key)\t\(.value)"'
a1  {"b1":1,"c1":{"c1":"test","c2":null}}
a2  {"b2":1,"c":{"c2":null}}
© www.soinside.com 2019 - 2024. All rights reserved.