Jsonnet 格式化器与求值器
指导
Jsonnet 格式化器与求值器
粘贴 Jsonnet 源代码,获取完全评估的 JSON 结果,或美化源代码本身。该工具完全在您的浏览器中运行,因此您的配置永远不会离开页面。适用于预览 Kubernetes 部署、Grafana 仪表板、Tanka 环境或其他以 Jsonnet 表达的配置代码。
如何使用
- 将 Jsonnet 代码粘贴到输入框中,或拖动一个
.jsonnet/.libsonnet文件到上传器。 - 选择 评估 → JSON 以计算结果,或 格式化 Jsonnet 源代码 以重新打印具有一致缩进的源代码。
- 选择您偏好的缩进方式(2 个空格、4 个空格、制表符或最小化)。
- 可选择按字母顺序排序对象键,或在顶层评估结果为纯字符串的情况下强制字符串输出。
- 一键复制结果,或下载为
.json/.jsonnet.
特征
- 实时评估 – 您输入时,Jsonnet 源代码将被解析并评估为 JSON,更新操作经过节流以确保响应性。
- 对象继承 – 完全支持
+:,::,并且:::字段操作符,以及self且super引用。 - 表达式 – 数组和对象表达式。
[expr for x in xs if cond]函数和闭包{[k]: v for k in keys}– 支持顶层和内联函数,带有位置参数、命名参数和默认参数。 - 标准库子集 – 常见的
- 辅助函数,如 ,以及其他功能。
std.*格式字符串std.map,std.filter,std.foldl,std.range,std.join,std.sort,std.objectFields,std.mergePatch,std.format– Python 风格的 - 格式化完全符合预期,包括精度和宽度指定符。 带位置的错误信息
%– 解析和运行时错误会报告行号和列号,以便您快速定位问题。 - 隐私设计 – 所有内容都在您的浏览器中运行,不会发送到服务器。
- 何时使用 Jsonnet Jsonnet 是一种数据模板语言,编译为 JSON。当您需要生成大量相似的 JSON 或 YAML 文件并避免复制粘贴时,它非常有用。典型用例包括 Kubernetes 部署中许多资源共享的样板代码、Grafana 仪表板中重复的面板模板、CI 流水线定义,以及在不同环境中略有差异的特性标志或配置包。
此浏览器内评估器无需文件系统,因此
不被支持。格式化器不保留注释,因为它基于解析后的 AST 工作。标准库覆盖了常见情况——如果您依赖于特殊辅助函数,请运行官方
限制
二进制文件以获得最终输出。 import, importstr,并且 importbin 什么是 Jsonnet 以及它与 JSON 的关系? jsonnet Jsonnet 是一种小型、纯函数式的配置语言,是 JSON 的严格超集。任何 JSON 文档都是有效的 Jsonnet 程序,但 Jsonnet 在其基础上增加了变量、函数、条件语句、算术运算、字符串插值和对象继承。程序最终被评估为纯 JSON,因此输出是每个系统都已理解的内容。
常问问题
-
为什么 Jsonnet 不仅仅是带注释的 JSON?
JSON 没有抽象机制,这意味着相似的文档最终会通过复制粘贴而分散,随着时间推移变得不一致。Jsonnet 引入了局部变量、函数和对象继承,使共享结构可以一次定义并复用。该语言是确定性的且无副作用,因此相同的输入总是产生相同的 JSON——这一特性对于可重复的基础设施非常有用。
-
Jsonnet 对象继承中的 +: 操作符有什么作用?
在 Jsonnet 中,
-
字段操作符会将同名字段与父对象中的字段合并,而不是覆盖它。对于数字和字符串,合并是加法或字符串拼接;对于数组,是拼接;对于对象,是深度合并。这使得派生对象可以扩展而不是替换父对象的值,这是分层配置库的核心机制。
在 Jsonnet 中,self 和 super 有什么区别?
+:refers to 当前正在构建的对象,包括后续的覆盖——因此,以 -
定义的字段始终看到最终的
selfrefers specifically to the parent in an inheritance chain, soself.xreaches the value ofx.superbefore the current object's overrides were applied. The two together allow late binding (viasuper.x) and explicit access to inherited values (viax如何将 Jsonnet 评估与 Helm 或 Jinja 等模板语言区分开?self模板语言通过字符串替换生成文本,这意味着输出结构在渲染前无法保证是有效的 JSON 或 YAML。Jsonnet 会将一个类型表达式树评估为 JSON 值,因此在评估时就强制执行语法正确性,错误信息指向原始表达式而非生成的文本行。代价是 Jsonnet 是一种具有自身语义的真实语言,需要学习。super). -
在此粘贴 Jsonnet 代码...
评估后的 JSON 或格式化的 Jsonnet 代码将显示在这里...
