使用 jq 命令行处理器时 JSON 格式的问题

Issues with JSON format while using jq commandline processor

我正在尝试使用 jq 命令行 JSON 处理器 https://shapeshed.com/jq-json/(效果很好)来处理一个 JSON 文件,该文件似乎是使用一些糟糕的选择制作的。

通常您在 JSON 文件中的 ID 和值不会包含任何句点,例如:

{"id":"d9s7g9df7sd9","name":"Tacos"}

要从文件中获取 Tacos,您可以在 bash 中执行以下操作:

echo $json | jq -r '.name'

这会给你 Tacos(该示例中可能缺少一些额外的代码,但你明白了。)

我有一个 JSON 文件,如下所示:

{"stat.blah":123,"stat.taco":495,"stat.yum... etc.

请注意他们是如何决定在与该值关联的标识字段中使用句点的?这使得使用 jq 变得非常困难,因为它将句点关联为分隔符以深入挖掘 JSON 中的子值。当然,我可以先加载我的文件,替换所有“。”使用“_”可以解决问题,但这似乎是一个非常愚蠢和老套的解决方案。我无法更改初始 JSON 文件的生成方式。我只需要处理它。在 bash 中有什么方法可以做一些特殊的转义以使其忽略句点吗?

谢谢

使用generic object index语法,例如:

.["stat.taco"]

如果您使用 generic object syntax,例如.["stat.taco"],然后像往常一样使用管道或不带点进行链接,例如

.["stat.taco"]["inner.key"]

如果您的 jq 足够新,那么您可以通过引用带有特殊字符的键来使用链式点符号,例如

."stat.taco"."inner.key"

您也可以混合搭配,但不支持诸如 .["stat.taco"].["inner.key"] 的表达式(自 jq 1.6 起)。