gpt4 book ai didi

当其中一个值包含反斜杠时,jq 无法解析

转载 作者:行者123 更新时间:2023-12-05 04:00:31 27 4
gpt4 key购买 nike

我有一个 json 输出,用其中一个值表示一个 linux 命令:

... ,"proc.cmdline":"sh -c pgrep -fl \"unicorn.* worker\[.*?\]\"", ...

在某些情况下,命令包含反斜杠,因此输出的 json 也会包含反斜杠。

我需要用 jq 解析输出,但它失败并出现错误:

parse error: Invalid escape at line 1, column 373

指的是这个:\[

但是,这是命令的一部分,因此应该存在。

如果手动编辑该行,将 \[ 转换为 \\[,则它通过。然而,结果输出包含两个反斜杠:

...
"proc.cmdline": "sh -c pgrep -fl \"unicorn.* worker\\[.*?\\]\"",
...

现在,我不能每次都在那里手动编辑。这个输出是另一个软件自动产生的,每次进来我都需要用jq解析。

此外,即使我能够将每个 \[ 编辑为 \\[,(比如使用 sed 之类的东西)输出变成谎言,第二个 \ 是假的。

关于如何解决这个问题有什么想法吗?


编辑:这是供引用的完整 json(由我正在使用的程序 (falco) 的输出接收到的原始数据):

{"priority":"Debug","rule":"Run shell untrusted","time":"2019-05-15T07:32:36.597411997Z", "output_fields": {"evt.time":1557905556597411997,"proc.aname[2]":"gitlab-mon","proc.aname[3]":"runsv","proc.aname[4]":"runsvdir","proc.aname[5]":"wrapper","proc.aname[6]":"docker-containe","proc.aname[7]":"docker-containe","proc.cmdline":"sh -c pgrep -fl \"unicorn.* worker\[.*?\]\"","proc.name":"sh","proc.pcmdline":"reactor.rb:249                                                                       ","proc.pname":"reactor.rb:249","user.name":null}}

最佳答案

JSON 标准对于必须转义哪些字符非常明确,而 [ 不是其中之一(尽管 reverse solidus - \ 是)。所以是你的脚本/软件生成 JSON 违反了 JSON 标准——你可以在任何知名的在线 JSON 验证器上验证它,例如:https://jsoncompare.com/#!/simple/ - 它也会产生错误。

如果您无法增强/修复生成该 JSON 的脚本,那么您需要确保在传递给 JSON 处理器之前对那些不合规的引用进行双引号:例如

... | sed -E 's/\\([][])/\\\\\1/g' | ...

关于当其中一个值包含反斜杠时,jq 无法解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56144431/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com