2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Google 提议使用 Jsonnet 来增强 JSON

  • 2015-04-29
  • 本文字数:1082 字

    阅读完需:约 4 分钟

Google 开源了一门配置语言 Jsonnet 来取代 JSON,它完全向后兼容并加入了一些新特性:注释、引用、算术运算、条件操作符,数组和对象内含,引入,函数,局部变量,继承等。Jsonnet 程序被翻译为兼容 JSON 的数据格式。

注释:Jsonnet 接受两种风格的注释——C 风格(/* …. */)和 C++ 风格(//… )。

引用:关键字 self 引用当前对象,操作符 $ 引用根对象。

算术运算和条件运算符:运算符 + 可以计算数字和,拼接字符串、数组和对象;运算符 == 和!= 用来判别 true 或 false。运算符 if 与 C 语言中的三元表达式 ? : 类似。下面是一些 Jsonnet 运算符和转译后的 JSON 代码示例(借鉴了官方语言示例):

复制代码
// bar_menu.3.jsonnet
{
foo: 3,
bar: 2 * self.foo, // Multiplication.
baz: "The value " + self.bar + " is "
+ (if self.bar > 5 then "large" else "small") + ".",
array: [1, 2, 3] + [4],
obj: {a: 1, b: 2} + {b: 3, c: 4},
equality: 1 == "1",
}
复制代码
{
"foo": 3,
"bar": 6,
"baz": "The value 6 is large.",
"array": [1, 2, 3, 4],
"obj": {a: 1, b: 3, c: 4},
"equality": false
}

构建数组和对象:构造器 for 可以用来构建数组和对象,下面是示例:

复制代码
{
foo: [1, 2, 3],
bar: [x * x for x in self.foo if x >= 2],
baz: { ["field" + x]: x for x in self.foo },
obj: { ["foo" + "bar"]: 3 },
}
复制代码
{
"foo": [ 1, 2, 3 ],
"bar": [ 4, 9 ],
"baz": {
"field1": 1,
"field2": 2,
"field3": 3
},
"obj": { "foobar": 3 }
}

模块化:Jsonnet 编写的代码可以分割为多个文件,使用 import 进行访问,引入的对象可以使用运算符 + 进行拼接。

函数:Jsonnet 的值可以包含函数,这部分会被标记为隐藏字段并且不被翻译到 JSON 中。函数被用于多项评估,点击这里查看示例。

Jsonnet 同样支持局部变量、引入式对象继承、运算符 + 拼接、可计算和可选字段等特性。

Jsonnet 语言引擎使用 C++11 进行实现,为了便于移植到其它语言中使用 C 语言 API 进行了封装,目前提供 C 和 Python 的库。C++ 实现的引擎可以通过 Emscripten 编译为 JavaScript 代码,你也可以在 Node.js 中使用非官方的 npm 包

想了解更多,我们推荐阅读语言规范以及与其它配置语言的对比这篇文章。

查看英文原文: Google Proposes to Enhance JSON with Jsonnet


感谢邵思华对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-04-29 09:149490
用户头像

发布了 63 篇内容, 共 137.3 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

5分钟快速梳理你的HTTP体系

程序员海军

前端 HTTP 7月月更

加盟自助洗车真的不用招人吗

共享电单车厂家

自助洗车加盟 车白兔自助洗车 无人自助洗车

24小时自助共享洗车有人洗吗

共享电单车厂家

24小时无人自助洗车 自助洗车加盟 车白兔自助洗车 自助洗车店

企业在创建产品帮助中心时需要注意的问题!

Baklib

企业 客户服务 帮助中心

HDFS、纱线、蜂巢MRS中使用Ranger实现权限管理全栈式实践

华为云开发者联盟

大数据 后端 MRS

24小时自助共享洗车店要多少钱

共享电单车厂家

自助洗车加盟 车白兔洗车 24小时自助共享洗车 自助共享洗车店

无需CORS,用nginx解决跨域问题,轻松实现低代码开发的前后端分离

葡萄城技术团队

nginx 前后端分离 cros

【7.8-7.15】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

24小时共享自助洗车店你见过吗

共享电单车厂家

24小时共享自助洗车 自助洗车加盟 自助洗车店

【计算讲谈社】第六讲|三星堆奇幻之旅:只有云计算才能带来的体验

大咖说

云计算 三星堆 数字空间 阿里云大咖说 计算讲谈社

Apache APISIX Meetup 南京站!我们 7.30 见!

API7.ai 技术团队

API网关 APISIX Meetup Workshop

【森城市】GIS数据漫谈(四)— 坐标系统

ThingJS数字孪生引擎

要想不踩SaaS那些坑,得先了解“SaaS架构”

华为云开发者联盟

云计算 开发 SaaS DTT

深入理解 Linux 的 TCP 三次握手

C++后台开发

Linux TCP 后端开发 C++后台开发 C++开发

C 语言入门(六)

逝缘~

7月月更

linux之拖拽上传文件

入门小站

Linux

什么是真正的HTAP?(一)背景篇

StoneDB

MySQL OLAP OLTP HTAP StoneDB

阿里云E-MapReduce 极客大赛开放报名 数十万奖金等你挑战

Lily

比赛

洗车店洗车贵试试自助洗车吧

共享电单车厂家

自助洗车加盟 车白兔自助洗车 什么是自助洗车 自助洗车价格

Python|类与对象

AXYZdong

Python 7月月更

“智慧工厂”上线,破局传统工厂数字化转型

AIRIOT

低代码 物联网 低代码,项目开发

英特尔发布开源AI参考套件

科技之家

使用 SSH 方式拉取代码

攻城狮杰森

git GitHub SSH gitee 7月月更

Java实现有getMin功能的栈

工程师日月

Java 算法 7月月更

使用Java客户端发送消息和消费的应用

hum建应用专家

云计算

Grafana Labs携手阿里云,将提供国内首款Grafana托管服务

Lily

如何在企业工作中应用知识管理,解决企业的问题?

Baklib

知识管理

华为云Stack南向开放框架,帮助生态伙伴高效入云

华为云开发者联盟

云计算 后端

区块链合约安全系列(三):如何认识及预防公链合约中的自毁攻击

BSN研习社

区块链、

Google提议使用Jsonnet来增强JSON_JavaScript_Abel Avram_InfoQ精选文章