使用 jQ 将 JSON 字典转换为 JSON 行 递归分拆

问题描述

我有一个名为 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}

dogcat 键消失。

解决方法

这是一种可能性:

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}}