我有一个json文件,数据如下:
{
"0cef7017-e6af-4c92-9e7c-4db1d7afc733": {
"Show": [
"TEST1",
"TEST2"
],
"data1": 12345,
"data2": 1234,
"name": "Amit",
"Ref": "group_1",
"data3": 123
},
"metadata": "ThRsmflXIMA5LVlOI8vJ0OoSokw=",
"eef75ad4-c733-42ac-9c55-dd5aa2d69fad": {
"Show": [
"TEST3",
"TEST4"
],
"data1": 12345,
"data2": 1234,
"name": "Anuj",
"Ref": "group_2",
"data3": 123
}
}
我想要这样的输出:
12345,Amit
12345,Anuj
我尝试了以下命令:
cat AV | jq '.[]|."data1",."name"'
12345
Amit
jq: error (at <stdin>:25): Cannot index string with string "data1"
它没有给出预期的输出。它似乎没有完全解析为元数据中没有出现的data1字符串
您可以使用
cat AV |jq -r 'to_entries[] | select(.key != "metadata") |.value |"(.data1), (.name)"'
其中具有关键字值CCD_ 1的元素被移除。由于metadata
是最外层的密钥之一,没有密钥名称为data1
或name
的子元素,因此会引发错误
演示
您可以使用递归下降..
。
过滤器
[[.. | (.data1?) | select(.!=null)], [.. | (.name?) | select(.!=null)]]
| transpose[]
| @csv
输入
{
"0cef7017-e6af-4c92-9e7c-4db1d7afc733": {
"Show": [
"TEST1",
"TEST2"
],
"data1": 12345,
"data2": 1234,
"name": "Amit",
"Ref": "group_1",
"data3": 123
},
"metadata": "ThRsmflXIMA5LVlOI8vJ0OoSokw=",
"eef75ad4-c733-42ac-9c55-dd5aa2d69fad": {
"Show": [
"TEST3",
"TEST4"
],
"data1": 12345,
"data2": 1234,
"name": "Anuj",
"Ref": "group_2",
"data3": 123
}
}
输出
12345,"Amit"
12345,"Anuj"
演示
https://jqplay.org/s/l9OGsI3hFq