首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用JQ读取Json数组

用JQ读取Json数组
EN

Stack Overflow用户
提问于 2019-07-31 19:06:17
回答 1查看 672关注 0票数 1

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

代码语言:javascript
运行
复制
[
    {
        "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"
        },
]

我使用以下命令

代码语言:javascript
运行
复制
var1=$(jq '.['$cpt'] | ._source .element1' file.json) 

我可以得到我的价值,但是我收到了这个错误:

jq错误不能用数字索引

我已经试过了

代码语言:javascript
运行
复制
var1=$(jq '.[] | ._source .element1' file.json) 

但是我接收所有的数据,我需要按索引接收数据。

这是我的bash代码:

代码语言:javascript
运行
复制
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

对于每一行,我都会收到相同的错误:/您知道我为什么会有这个错误吗?

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2019-07-31 19:55:49

编辑:这个A已经被更新,以反映对Q的更新。

  1. 给定的输入是(仍然)无效的JSON,但是根据问题的描述修复它之后,可以使用这个jq过滤器提取.element1: .._source.element1 要提取第一个._source中的所有项,只需编写: .._source[] 或者如果你想完全确定下订单: .._source "element1“、"element2”、"element3“、"element4”、“@时间戳”、"element5“、"element6”、"element7“、"element8” 无论哪种方式,一次提取所有的项(至少对于每个组来说)可能是要做的事情,即使确实有必要在jq之外单独处理每个条目。
  2. 这句话: var1=$(jq '.'$cpt‘\ ._source .element1’file.json) 是一种混乱(就像其他类似的行一样)。很明显你的意思是这样的: var1=$(jq ".\"$cpt\“x ._source .element1”file.json) 由于$cpt在其他地方显然是bash变量。即使这正是您所希望的,最好以其他方式传递bash变量,例如,如果$cpt是一个整数: var1=$(jq 当然,这仍然不能解决与示例JSON不匹配的问题。
  3. 关于使用jq的一次运行中的值填充bash变量,有很多这样的Q&As。参见例如jq - return json as bash array
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57297397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档