【问题标题】:jq: Cannot index array with stringjq:无法用字符串索引数组
【发布时间】:2016-04-05 06:32:16
【问题描述】:

我在一个文件中有以下内容(我将其称为“myfile”):

[{
    "id": 123,
    "name": "John",
    "aux": [{
        "abc": "random",
        "def": "I want this"
    }],
    "blah": 23.11
}]

我可以在没有[] 的情况下解析它,如下所示:

$ cat myfile | jq -r '.aux[] | .def'
I want this
$

但是使用[] 我得到:

$ cat myfile | jq -r '.aux[] | .def'
jq: error: Cannot index array with string

如何使用 jq 处理 []? (我确信我可以用不同的工具解析它们,但我想学习 jq 的正确用法。

【问题讨论】:

  • 我多次重读这个问题以了解这个想法,然后意识到它的提问方式非常糟糕。故事本身基本上存在逻辑错误。徐旺说:“我可以不用解析它”,然后立即使用那个东西!有没有搞错?那么第一种情况和第二种情况有什么区别呢?你能解决这个问题吗?还请验证代码突出显示。出于某种原因,这两部分的突出显示方式不同,因此很难看出代码是相同的。
  • 我试图自己编辑它,但只是得到:“建议的编辑队列已满”,不管是什么意思。

标签: json jq


【解决方案1】:

应该是:

jq '.[].aux[].def' file.json

.[] 遍历外部数组,.aux[] 然后遍历每个节点的aux 数组,.def 打印它们的.def 属性。

这将输出:

"I want this"

如果您想摆脱双引号,请将-r (--raw) 传递给jq

jq -r '.[].aux[].def' file.json

输出:

I want this

【讨论】:

  • 好答案,感谢 -r 提示也删除引号,超级方便。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多