jq - 转义键名中的反斜杠

4

我有一个带有\的键,但是在使用jq时似乎无法访问它。感谢任何帮助。

$ cat /tmp/yo
{
  "kubectl.kubernetes.io\last-applied-configuration": "test"
}

$ cat /tmp/yo | jq .["kubectl.kubernetes.io\last-applied-configuration"]
parse error: Invalid escape at line 2, column 52

1
需要更多的引号。你的 " 被 shell 吞掉了,而不是传递给 jq - Charles Duffy
另一件事是,您的数据根本不是有效的JSON。 无论是jq还是任何其他兼容的解析器都无法读取它 - 我很好奇,您首先是如何生成它的。 - Charles Duffy
例如,Python的JSON模块给定相同的输入文件将会发出ValueError: Invalid \escape: line 2 column 25 (char 26) - Charles Duffy
如果你将你的“JSON文档”粘贴到Chrome中,它会更加慷慨--它会完全忽略反斜杠,使得键值为kubectl.kubernetes.iolast-applied-configuration。有一个理由让明智的人(即Windows世界之外的所有人)使用正斜杠作为分隔符。 - Charles Duffy
1个回答

1

这不是一个有效的JSON文档。 JSON中的反斜杠必须被转义以包含在字面字符串中。请向生成此无效内容的任何工具报告错误。


要在JSON中包含反斜杠,应该像这样写:
{
  "kubectl.kubernetes.io\\last-applied-configuration": "test"
}

如果您拥有这样一个有效的文档,那么您可以使用以下内容:
jq '.["kubectl.kubernetes.io\\last-applied-configuration"]' </tmp/yo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接