You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么jq语法中[]后接["rdfs:label"]不需要额外加.符号?

jq属性访问语法规则说明

jq的属性访问有两种明确的合法格式,差异如下:

  • 简化属性访问:仅适用于属性名由纯字母、数字、下划线组成的合法标识符场景,格式为.属性名(比如.name、.age),这种写法必须带前缀.。
  • 通用括号属性访问:适用于所有属性名场景(尤其适合包含特殊字符、空格、关键字的属性名),格式为["属性名"],该语法本身已经包含属性访问语义,不需要额外在前缀加.。

你遇到的问题原因解释

  • 可正常运行的jq -r '."@graph"[]["rdfs:label"]' 9.0/schemaorg-all-http.jsonld符合语法规则:."@graph"先取根对象的@graph属性,[]迭代该属性对应的数组的每一项,之后直接用["rdfs:label"]取每一项的rdfs:label属性,逻辑完全通顺。
  • 无法运行的jq -r '."@graph"[].["rdfs:label"]' 9.0/schemaorg-all-http.jsonld属于语法错误:你在[]后面额外加了一个.,相当于在通用括号访问语法前多余添加了属性访问前缀,jq无法识别该混合写法,自然会运行失败。

关于你看到的示例差异说明

你见到的[]后接.name的写法,这里的.name是简化属性访问,本身就要求带前缀.,等价于["name"]。也就是说.[].name和.[]["name"]是完全等价的合法写法,但是不能写成.[].["name"],这种混用两种语法的写法不符合jq的语法规范。

官方文档提到的.["foo::bar"]、.["foo.bar"]有效,指的是直接从当前上下文的根对象取属性的场景,此时最开头的.代表当前上下文对象,是必须的,和迭代数组后直接接["属性名"]的场景并不冲突。

内容的提问来源于stack exchange,提问作者chx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:24:05