我有类似以下内容
echo "{\"t\":\"set foo='{\\\"mode\\\":1}'\"}"|jq .
{
"t": "set foo='{\"mode\":1}'"
}
我希望输出看起来像
{
"t": "set foo='{\"mode\":1}'",
"mode": 1
}
现在,我正在执行几个步骤来实现这一点,并想看看是否可以将其合并到一次 jq 调用中。
答案1
对于这个确切的输入,
jq '. + (.t[9:-1] | fromjson)'
会做你想做的事。它提取字符{"mode":1}
来自字符串(从 9 开始,省略最后一个)这样就去掉了两边的单引号,然后将其解析为 JSON到一个对象 中fromjson
,最后将该对象 ( {"mode": 1}
) 与原始输入 (.
)使用+
。
您将需要调整索引以匹配您的实际数据。如果您需要找到开口在哪里'
,(.t|index("\u0027")+1)
将作为9
;的替代品如果您需要更彻底地解析它,请提出一个新问题。