[英]Read Json array with JQ
在我的项目中我生成一个json文件这里是一个例子(只有一个索引):
[
{
"aaa": "lklklk",
"bbb": "uiop",
"kkk": "zeez",
"lll": 3,
"_source": {
"element1": "zzzz",
"element2": "eeee",
"element3": "hhhhh",
"element4": "jjjjjj",
"@timestamp": "2019-07-31T08:32:45.000Z",
"element5": "1",
"element6": "6768",
"element7": "gggg",
"element8": "ppppp"
},
{
"aaa": "lklklk",
"bbb": "uiop",
"kkk": "zeez",
"lll": 3,
"_source": {
"element1": "zzzz",
"element2": "eeee",
"element3": "hhhhh",
"element4": "jjjjjj",
"@timestamp": "2019-07-31T08:32:45.000Z",
"element5": "1",
"element6": "6768",
"element7": "gggg",
"element8": "ppppp"
},
]
我用这个命令
var1=$(jq '.['$cpt'] | ._source .element1' file.json)
我可以收到我的价值,但是收到这个错误:
jq错误无法使用数字索引编号
我已经尝试过了
var1=$(jq '.[] | ._source .element1' file.json)
但我收到所有数据,我需要通过索引接收数据。
这是我的bash代码:
while (($verification!=1))
do
elementa[$cpt]=$(jq '.['$cpt'] | ._source .element1' $File.json)
elementb[$cpt]=$(jq '.['$cpt'] | ._source .element2' $File.json)
elementc[$cpt]=$(jq '.['$cpt'] | ._source .element3' $File.json)
elementd[$cpt]=$(jq '.['$cpt'] | ._source .element4' $File.json)
elemente[$cpt]=$(jq '.['$cpt'] | ._source .element5' $File.json)
elementf[$cpt]=$(jq '.['$cpt'] | ._source .element6' $File.json)
elementg[$cpt]=$(jq '.['$cpt'] | ._source .element7' $File.json)
elementh[$cpt]=$(jq '.['$cpt'] | ._source ."@timestamp"' $File.json)
elementi[$cpt]=$(jq '.['$cpt'] | ._source .element8' $File.json)
done
对于每一行,我收到同样的错误:/你知道为什么我有这个错误吗?
先感谢您。
[编辑:此A已更新,以反映Q的更新。]
给定的输入是(仍然)无效的JSON,但在根据问题的描述修复它之后,您可以使用此jq过滤器来提取.element1:
.[0]._source.element1
要提取第一个._source中的所有项目,您只需编写:
.[0]._source[]
或者,如果您想完全确定订购:
.[0]._source[ "element1","element2","element3","element4","@timestamp","element5","element6","element7","element8"]
无论哪种方式,一次提取所有项目(至少对于每个组)可能是要走的路,即使真的有必要在jq之外单独处理每个项目。
这条线:
var1=$(jq '.['$cpt'] | ._source .element1' file.json)
是一个混乱(像所有其他线路一样)。 显然你的意思是这样的:
var1=$(jq ".[\\"$cpt\\"] | ._source .element1" file.json)
因为$cpt
在其他地方显然是一个bash变量。 即使这是你想要的,最好以其他方式传递bash变量,例如,如果$ cpt是一个整数:
var1=$(jq --argjson cpt "$cpt" '.[$cpt] | ._source .element1' file.json)
当然,这仍然没有解决与样本JSON的不匹配问题。
关于使用来自单个jq运行的值填充bash变量有很多SO Q&As。 参见例如jq - 将json作为bash数组返回
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.