jq - 为什么这个 jq 管道不需要点?

标签 jq

jq -r '."@graph"[]["rdfs:label"]' 9.0/schemaorg-all-http.jsonld 可以工作,但 jq -r '."@ graph"[].["rdfs:label"]' 9.0/schemaorg-all-http.jsonld 没有,我不明白为什么 .["rdfs:label"] 不需要需要这个点吗? https://stackoverflow.com/a/39798796/308851建议在 []https://stedolan.github.io/jq/manual/#Basicfilters 之后需要 .name

For example .["foo::bar"] and .["foo.bar"] work while .foo::bar does not,

那个点去哪儿了?

最佳答案

使用 jq 手册的术语,jq 表达式是 基本上由管道和所谓的“基本过滤器”组成。这 “基本过滤器”标题下的第一个过滤器是识别过滤器, .[] 是“数组/对象值迭代器”。

从这个角度,也就是从 Pipes-and-basic-filters,正在考虑的表达式 ."@graph"[]["rdfs:label"] 可以被视为缩写形式 管道:

.["@graph"] | .[] | .["rdfs:label"]

所以从这个角度来看,问题是允许使用哪些缩写。 最重要的缩写规则之一是:

E | .[] #=> E[]

另一个是:

.["<string>"] #=> ."<string>"

应用这些规则可以得到简化的表达式。

所以也许这个问题的“为什么”的基本答案是:为了方便。 :-)

关于jq - 为什么这个 jq 管道不需要点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69537349/

相关文章:

json - 如何使用 tsv 中的数组转换 JSON,并使用 jq 保留数组结构?

json - 如何使用 jq 将多个字段连接到同一行

json - 从 bash 关联数组构建 JSON 对象

amazon-s3 - 如何中止存储桶的所有不完整分段上传

json - 将解析的 JSON 导出到 CSV 文件时自定义 -jq 的分隔符

json - 使用 jq 展平嵌套的 JSON

json - 如何使用 jq 从 JSON 中获取键名

json - JQ - 按层次结构解析字段

json - 如何跳过 jq 输入中的前 n 个对象

json - jq 过滤子对象值