json-e/json-e
GitHub: json-e/json-e
JSON-e 是一个数据结构参数化模板系统,通过将 JSON 对象视为模板并用上下文数据对其进行变换来生成输出数据结构。
Stars: 203 | Forks: 90
# JSON-e
JSON-e 是一个数据结构参数化系统,用于将上下文嵌入到
JSON 对象中。
其核心理念是将一个数据结构视为“模板”,并对其进行转换,
使用另一个数据结构作为上下文,以生成输出的数据结构。
有无数的库可以对字符串执行此操作,例如
[mustache](https://mustache.github.io/)。JSON-e 的独特之处在于它
处理的是数据结构,而不是它们的文本表示形式。这允许
输入以多种格式(JSON、YAML 等)编写,甚至可以动态
生成。这也意味着输出永远不会是“无效的”,即使在
包含大量上下文数据时也是如此。
JSON-e 还被设计为在处理不受信任的数据时是安全的。它从不使用
`eval` 或任何其他可能导致任意代码执行的函数。它
还不允许无限迭代,因此任何 JSON-e 渲染操作都会
在有限的时间内完成。
## 语言定义与实现
该仓库既定义了 JSON-e 语言,也包含了该语言的几种
实现。
语言定义体现在 [`./specification.yml`](./specification.yml) 以及
语言构造的文档中。
语言及其实现全部一起进行版本控制,并遵循
语义化版本规范。对语言规范的破坏性变更并不常见,
通常是由错误修复而非新功能引起的。通常,您可以
认为该语言是稳定的。
在各个实现之间,任何未记录为未定义行为的行为差异
都将被视为错误。如果修复该错误会导致某个实现中的
向后不兼容,那么该变更可能会被视为
破坏性变更,并随新的主版本发布。
### 其他实现
* [json-everything](https://json-everything.net/json-e) 提供了 .NET 的实现。
## 完整文档
请参阅 [json-e.js.org](https://json-e.js.org)。
## 变更日志
请参阅
[CHANGELOG.rst](https://github.com/json-e/json-e/blob/main/CHANGELOG.rst)
了解此库每个版本的变更。
## 实际应用
JSON-e 在哪里被使用?
* [AlterSchema](https://alterschema.sourcemeta.com/) 使用 JSON Schema 本身和 JSON-e 编写的声明式转换规则集来指定升级。
* [Taskcluster](https://taskcluster.net/) 广泛使用 JSON-e 从各种 JSON 格式的输入(例如 GitHub 事件)生成任务定义。
(欢迎提交 PR 在此处添加您的项目)
标签:JSON, SOC Prime, 参数化, 多人体追踪, 开发工具, 数据可视化, 数据结构, 数据转换, 模板引擎, 通知系统