使用 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 起)。
我正在尝试使用 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 起)。