【问题标题】:How to make string replacement in a JSON template?如何在 JSON 模板中进行字符串替换?
【发布时间】:2021-08-28 20:44:19
【问题描述】:

如果我有一个 JSON 模板,其中的某些变量应替换为它们的实际值,是否有处理正确转义的好方法?

例如,$value 可以替换为包含 " 等字符的字符串,这些字符应在 JSON 中进行特殊处理。

{ "x": $value }

模板可以是任意复杂的。因此,用某种编程语言(如 python)对模板进行编码,然后用该语言执行替换,然后转储 JSON 输出,这不是一个好的解决方案。

谁能告诉我一个通用但简洁的方法来执行替换?

请注意,我用jq 标记了这个问题。我不确定它与这个问题是否严格相关。如果没有,请删除标签。我标记了jq,因为知道jq 的人也可能知道我的问题的解决方案,尽管jq 只是用于转换JSON 文件。一个优雅的解决方案可能类似于jq,因为它定义了一种特定于领域的语言。

【问题讨论】:

    标签: json templates jq template-engine


    【解决方案1】:

    jq 作为模板引擎工作得非常好,但也有一些选择,例如取决于“模板”本身是否是有效的 JSON。

    在您给出的示例中,模板不是有效的 JSON,但它可能是有效的 jq,因此使用 jq "$-variables" 的策略是有意义的,例如大致如下:

    jq -n --arg value "someValue" -f template.jq
    

    template.jq 是您的模板。

    jq Cookbook 详细解释了使用 jq 作为模板引擎的三种不同策略:

    https://github.com/stedolan/jq/wiki/Cookbook#using-jq-as-a-template-engine

    【讨论】:

    • 例如$ jq -n --argjson a 0 -f <(echo '{a: $a, b: $a}'),模板由-f从一个未命名的管道中指定。有没有办法从标准输入指定它?
    • 不是真的,除非您允许-f <(cat -) 或同等权限。不过,这并不重要,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2018-01-11
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多