使用适当的转义从Nustache生成JSON

时间:2019-02-13 12:21:51

标签: json nustache

我想使用Nustache生成JSON以与特定的Web服务对话。

我不想使用Newtonsoft或类似的东西进行正确的JSON构建,因为此Web服务的规范以带有占位符的文本文件形式出现。我同意这很愚蠢。因此,将它们复制/按摩/粘贴为模板格式很有意义,并希望减少错误。

但是,当然,Nustache并不知道什么使有效JSON。

使用类似的模板

{{1}}

以及需要在JSON中转义的bar值,表示它包含大括号或无害的反斜杠,结果是字符串替换正确的,但无效的JSON。

是否可以告诉Nustache我希望输出为JSON并在替换字符串时让其转义字符串?

还是建议您做一个助手来管理转义并将其放在所有占位符上?

感谢阅读和思考。

1 个答案:

答案 0 :(得分:0)

我没有找到一个完全令人满意的答案,但是找到了可行的解决方案。

我的解决方法是Nustache帮助程序,它负责报价和转义。丑陋的是,我需要在每个实例的模板中指定助手:

{ "foo": "{{json bar}}" }

助手实现很简单,可以在此处完整列出。对于实际工作,它从Newtonsoft JSON委托给JsonConvert:

public class JSONHelpers
{
    public static void Register()
    {
        if (!Helpers.Contains("json"))
        {
            Helpers.Register("json", JSON);
        }       
    }

    private static void JSON(RenderContext ctx, IList<object> args, IDictionary<string, object> options,
                                     RenderBlock fn, RenderBlock inverse)
    {
        object input = args[0];
        if (input == null)
        {
            ctx.Write("null");
        }
        else
        {
            string text = input.ToString();
            string json = JsonConvert.ToString(text);
            ctx.Write(json);
        }
    }
}

希望这对其他人很有用。