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/