问题描述
我有一个名为 some_file.json
的 Json 文件:
{
"dog": {
"breed_1": 12,"breed_2": 20,},"cat": {
"breed_1": 6,"breed_2": 8,}
我想把它转换成下面的json行文件:
{"dog":{"breed_1":12,"breed_2":20}}
{"cat":{"breed_1":6,"breed_2":8}}
注意,原始 JSON 中的每个键值现在都在一行上。
我可以用任何编程语言为此编写一些代码。但我想知道如何使用 jQ 将 JSON 转换为 JSON 行文件。
我试过了,cat some_file.json | jq '.[]' -c > lines_file.jsonl
它返回了
{"breed_1": 12,"breed_2": 20}
{"breed_1": 6,"breed_2": 8}
dog
和 cat
键消失。
解决方法
这是一种可能性:
jq -c 'keys_unsorted[] as $k | {($k): .[$k]}'
递归分拆
可能值得将此功能封装在递归函数中:
def unbundle:
if type == "object"
then keys_unsorted[] as $k
| {($k): .[$k] | unbundle}
else . end;
使用您的示例,unbundle
会产生:
{"dog":{"breed_1":12}}
{"dog":{"breed_2":20}}
{"cat":{"breed_1":6}}
{"cat":{"breed_2":8}}