9个版本 (5个重大更新)

0.6.1 2023年10月16日
0.6.0 2023年9月13日
0.5.1 2023年6月28日
0.4.0 2023年6月21日
0.1.1 2023年4月25日

#467 in 编码

Download history 98/week @ 2024-04-07 107/week @ 2024-04-14 99/week @ 2024-04-21 87/week @ 2024-04-28 109/week @ 2024-05-05 88/week @ 2024-05-12 107/week @ 2024-05-19 101/week @ 2024-05-26 112/week @ 2024-06-02 182/week @ 2024-06-09 88/week @ 2024-06-16 136/week @ 2024-06-23 76/week @ 2024-06-30 51/week @ 2024-07-07 168/week @ 2024-07-14 142/week @ 2024-07-21

每月437次下载
22 个crate中使用 (4 个直接使用)

Apache-2.0

34KB
796

液态JSON模板库

该库是围绕Liquid模板引擎的一个小包装,它递归地处理用于Liquid模板的结构化JSON值。

液态JSON模板有助于模板化在配置或RPC传输中使用的JSON文件。

用法

use serde_json::json;
let template_json = json!({"this":"{{myval}}"});
let template_data = json!({"myval": 5});
let tmpl = liquid_json::LiquidJson::new(template_json);
let actual = tmpl.render(&template_data).unwrap();

let expected = json!({"this": 5}); // {{myval}} is replaced with 5
assert_eq!(actual, expected);

特性

默认启用的serde特性暴露了LiquidJsonValueLiquidJsonValueLiquidJson (和 serde_json::Value)的包装器,允许您在结构体中嵌入LiquidJson模板,例如。

use serde_json::json;
#[derive(serde::Serialize, serde::Deserialize, Debug, PartialEq)]
struct YourStruct {
    inner_liquid: liquid_json::LiquidJsonValue,
}

let json_data = json!({"inner_liquid":"{{myval}}"});

let template_data = json!({"myval": 5});

let yours: YourStruct = serde_json::from_value(json_data).unwrap();
let actual = yours.inner_liquid.render(&template_data).unwrap();

额外的过滤器

该库扩展了默认的Liquid过滤器,包括以下内容

  • json:将JSON字符串解析为Liquid对象(按需递归遍历数组/对象)。
  • each:在数组的每个元素上应用模板。
  • output:将Liquid值标记为模板的输出值。当您想返回数组或对象而不是字符串时很有用。
  • base64_encode:将值编码为base64字符串。
  • base64_decode:将base64值解码为字符串。如果结果不是字符串,则会出错。

示例

这些过滤器可以组合起来从简单的输入数据生成复杂的JSON结构。例如。

输入数据

{
  "to": ["[email protected]", "[email protected]"]
}

应用到液态JSON模板

{
  "recipients" : "{{ to | each: '{ \"email\": \"{{ el }}\" }' | json | output }}"
}

生成JSON

{
  "recipients": [
    {
      "email": "[email protected]"
    },
    {
      "email": "[email protected]"
    }
  ]
}

依赖关系

~9.5MB
~180K SLoC