使用jq解析多级json

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

我正在尝试解析一个如下所示的 JSON 文件:

[
  {
    "date":"date1",
    "results":
      [  
        {
            "field1":"string11",
            "field2":"string12",
            "field3":"string13",
        },
        {
            "field1":"string21",
            "field2":"string22",
            "field3":"string23",
        }
      ]
  },
  {
    "date":"date2",
    "results":
      [  
        {
            "field1":"string11",
            "field2":"string12",
            "field3":"string13",
        },
        {
            "field1":"string21",
            "field2":"string22",
            "field3":"string23",
        }
      ]
  }
]

我想要这样的输出:

08/05/2024,string11,string12,string13
08/05/2024,string21,string22,string23
09/05/2024,string11,string12,string13
09/05/2024,string21,string22,string23

我尝试过:

jq -Mr '.. | objects | select(has("field1")) | [.field1, .field2, .field3,] | @csv' file.json

并得到:

string11,string12,string13
string21,string22,string23
string11,string12,string13
string21,string22,string23

并尝试过:

jq -r '.[] | [.date, .results[].field1, .results[].field2, .results[].field3] | @csv' file.json

只得到第一行:

date1,string11,string12,string13
date2,string11,string12,string13

我想要:

date1,string11,string12,string13
date1,string21,string22,string23
date2,string11,string12,string13
date2,string21,string22,string23
json bash jq
1个回答
0
投票

保存

.date
,并在向下遍历到
.results
后重新使用它,可以使用变量,也可以与另一个过滤器连接。

jq -r '.[] | [.date] + (.results[] | [.[]]) | @csv'
"date1","string11","string12","string13"
"date1","string21","string22","string23"
"date2","string11","string12","string13"
"date2","string21","string22","string23"
© www.soinside.com 2019 - 2024. All rights reserved.