首页 > 解决方案 > JQ:执行令牌替换

问题描述

我想textma. 输入 JSON:

{
    "ma":{
        "a":"1",
        "b":"2",
        "c":"3"
    },
    "mb":{
        "a":"11"
    },
    "text":"https://ph.com?a={a}&b={b}"
}

期望的结果:https://ph.com?a=1&b=2

额外的功劳,我怎样才能让mb变量优先于ma变量,以便我的结果文本是:https://ph.com?a=11&b=2

我尝试过使用scanandsub和 and的组合,walk但无法弄清楚。

谢谢!

标签: jsonjqtemplate-engine

解决方案


定义一个函数以用新值替换标记。

def format($map): gsub("\\{(?<key>[^}]+)\\}"; "\($map[.key])");

有了这个,您就可以传入地图以进行替换。

.ma as $map | .text | format($map)

根据需要更新映射。

(.ma * .mb) as $map | .text | format($map)

推荐阅读