Arrays 用JQ读取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!

在我的项目中,我生成了一个json文件,下面是一个示例(只有一个索引):

我使用这个命令

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
    
    要提取第一个源中的所有项,您只需编写:

    .[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变量的问题。见例。


  • 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)