Linux jq-在keyname中转义反斜杠
我有一个带\的密钥,在使用jq时似乎无法访问它。感谢您的帮助Linux jq-在keyname中转义反斜杠,linux,jq,Linux,Jq,我有一个带\的密钥,在使用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 这不是有效的JSON文档。JSO
$ 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
这不是有效的JSON文档。JSON中的反斜杠必须转义才能包含在文本字符串中。针对生成此无效内容的工具报告错误
相反,在JSON中包含反斜杠如下所示:
{
"kubectl.kubernetes.io\\last-applied-configuration": "test"
}
如果您有这样一份有效的文件,那么您可以使用:
jq '.["kubectl.kubernetes.io\\last-applied-configuration"]' </tmp/yo
jq.[“kubectl.kubernetes.io\\last applicated configuration”]”需要更多的引号。您的“
s正在被shell吃掉,而不是传递给jq
。另一件事是,您的数据根本不是有效的JSON。无论是jq
还是任何其他兼容的解析器都不会读取它——我很好奇,首先是如何生成它的。例如,如果将“JSON文档”粘贴到Chrome中,给定同一输入文件的Python JSON模块将发出ValueError:Invalid\escape:line 2 column 25(char 26)
,它更慷慨一点——它完全忽略了反斜杠,使键kubectl.kubernetes.iolast应用配置
。理智的人(即Windows世界以外的所有人)使用前斜杠作为分隔符是有原因的。