【问题标题】:How can jq reference a property with a non-identifier character in the name (like "@")? [duplicate]jq 如何引用名称中包含非标识符字符的属性(如“@”)? [复制]
【发布时间】:2019-10-30 14:53:24
【问题描述】:

这似乎不太可能没有被问到,但我在任何地方都找不到。

我正在尝试过滤来自 elasticsearch 的响应,并且需要引用 @timestamp 字段。但是,jq 使用@ 指定formatters,我在文档中找不到有关如何转义@ 字符的任何内容。

$ jq '.hits.hits[] | ._source.@timestamp' < debug.response.json
jq: error: syntax error, unexpected $end, expecting QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.hits.hits[] | ._source.@timestamp
jq: 1 compile error

【问题讨论】:

  • 您能否在debug.response.json 中提供一个最小 JSON 示例,以便人们在发布之前尝试他们的答案?
  • 在字段名周围使用双引号来处理特殊字符,例如."@timestamp"。记录here,测试here

标签: json key jq


【解决方案1】:

您可以使用generic object index 语法,例如:

.hits.hits[]._source["@timestamp"]

【讨论】:

  • 是的,我终于让jq 在本地工作,所以我可以在规范上尝试这个(无法立即在文档中找到它)并且这个语法运行良好。但是当我回来的时候你已经发布了。 :-)
  • 我最终查看了词法分析器源代码并发现您可以使用.source."@timestamp",但在文档中完全找不到任何解决方案。感谢您的解决方案和链接!
猜你喜欢
  • 2017-03-18
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多