#json #serialization #dsl #builder #author #structures #content

jsonbuilder

一个用于使用简单 DSL 创建 JSON 结构的 JSON 构建器

1 个不稳定版本

0.1.0 2024年7月26日

#523编码

Download history 139/week @ 2024-07-26 4/week @ 2024-08-02

每月下载量 143

MIT 许可证

24KB
585

Json builder

一个用于使用简单 DSL 创建 JSON 结构的 JSON 构建器(基于 Jbuilder)。这是一个简单易用的工具,用于在 Rust 中创建 JSON 结构。

示例

notes @notes |note| do
    content @note.content
    author do
        name @note.author.name
        age @note.author.age
    end
    comments @note.comments |comment| do
        content @comment.content
        author do
            name @comment.author.name
            age @comment.author.age
        end
    end
end

使用上述 DSL 构建以下 JSON 结构:

{
    "notes": [
        {
            "content": "Note content",
            "author": {
                "name": "Author name",
                "age": 20
            },
            "comments": [
                {
                    "content": "Comment content",
                    "author": {
                        "name": "Comment author name",
                        "age": 25
                    }
                }
            ]
        }
    ]
}

安装

将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
jsonbuilder = "0.1.0"

用法

use jsonbuilder::{JsonBuilder, context_map};

#[derive(Serialize)]
struct Note {
    content: String,
}

fn main() {
    let context = context_map!({
        "note" => Note::new(),
    })

    let json = JsonBuilder::render("data", context)
}

JsonBuilder 在 templates 目录中搜索以 json 结尾的文件。

或者您可以使用原始字符串进行渲染

use jsonbuilder::JsonBuilder;

#[derive(Serialize)]
struct Note {
    content: String,
}

fn main() {
    let context = context_map!({
        "note" => Note::new(),
    })

    let input = "
    note @note.content

    ...
    "
    let json = JsonBuilder::render_raw(input, context)
}

设置

您可以通过在项目根目录下创建一个 jsonbuilder.toml 文件来更改设置。

template_path = "another/path/to/templates"

语法

语法基于 Jbuilder,并且与之非常相似。以下是一个支持语法的列表

变量

name @variable

数组映射

names @names |item| do
    name @item
end

对象映射

person do
    name @person.name
    age @person.age
    _ @person.abilities # _ is a special character that allows you to access the entire object
end

路线图

  • 基本 DSL
  • 数组映射
  • 对象映射
  • 扩展其他模板
  • 条件语句
  • 合并对象

贡献

欢迎贡献!您可以自由地打开一个问题或提交一个拉取请求。

有关更多信息,请参阅贡献指南

许可证

本项目采用 MIT 许可证 - 请参阅LICENSE 文件以获取详细信息。

依赖关系

~2.6–3.5MB
~75K SLoC