jq 错误(<stdin>在 :25 处):无法使用字符串"data1"索引字符串



我有一个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是最外层的密钥之一,没有密钥名称为data1name的子元素,因此会引发错误

演示

您可以使用递归下降..

过滤器

[[.. | (.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

最新更新