Arrays 用JQ读取Json数组
在我的项目中,我生成了一个json文件,下面是一个示例(只有一个索引): 我使用这个命令Arrays 用JQ读取Json数组,arrays,json,bash,jq,Arrays,Json,Bash,Jq,在我的项目中,我生成了一个json文件,下面是一个示例(只有一个索引): 我使用这个命令 var1=$(jq '.['$cpt'] | ._source .element1' file.json) 我可以收到我的值,但是我收到了这个错误: jq错误无法使用编号索引编号 我已经试过了 var1=$(jq '.[] | ._source .element1' file.json) 但是我接收所有数据,我需要按索引接收数据 下面是我的bash代码: while (($verification!
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的更新。]
.[0]._source.element1
要提取第一个源中的所有项,您只需编写:
.[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不匹配的问题JSON文件中真的有数组吗?它需要类似于
[{…},{…},…]
显示多个元素的文件外观。您好,是的,抱歉,这里是多个元素。我更新了帖子。示例输入仍然是无效的JSON。您可以使用jq来诊断问题[plural!],但也可以使用在线服务,如jsonlint.com:-)Hi De pointe,感谢您提供的详细信息:)我希望在一个变量中包含一个元素。因为之后我需要验证不同的元素。那么,我如何将一个元素放入一个变量中呢?我需要按数据和索引提取数据。我总是收到相同的错误:jq:error(在file.json:1中):无法用数字索引数字jq:error(在file.json:2中):无法用数字索引数字如果$cpt是整数,最简单的方法是使用--argjson
而不是--arg arg
。您好,是的,谢谢您。但是错误总是存在的:/I我不理解问题>您修复了JSON吗?尝试运行jq empty file.json
var1=$(jq --argjson cpt "$cpt" '.[$cpt] | ._source .element1' file.json)