jq 从 json 值中解析出 json

jq 从 json 值中解析出 json

我有类似以下内容

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;的替代品如果您需要更彻底地解析它,请提出一个新问题。

相关内容