如何用jq将JSON数组元素以制表符分隔输出适配sqlite3导入
仅用jq生成SQLite .import兼容的制表符分隔JSON格式
你遇到的报错是因为join()只能拼接字符串,而.value是JSON对象,无法直接和字符串拼接。只需要用tojson函数把对象转换成JSON格式的字符串,就能解决这个问题。
正确的jq命令
echo '[{"a1":{"b1":1,"c1":{"c1":"test","c2":null}}},{"a2":{"b2":1,"c":{"c2":"test","c2":null}}}]' | jq -r '.[] | to_entries[] | [.key | tojson, .value | tojson] | join("\t")'
执行结果
"a1" {"b1":1,"c1":{"c1":"test","c2":null}} "a2" {"b2":1,"c":{"c2":null}}
命令解释
-r:输出原始字符串(避免jq默认给整个结果额外添加引号).[]:遍历顶层数组中的每个对象元素to_entries[]:将每个对象转换为{key: "...", value: ...}结构并展开为单独条目.key | tojson:将key转换为带双引号的JSON字符串,匹配你想要的格式.value | tojson:将value对象压缩为单行JSON字符串join("\t"):用制表符拼接两个字符串,生成符合SQLite.import要求的每行一条记录格式
内容的提问来源于stack exchange,提问作者FangQ
相关产品推荐
相关产品推荐

