写点什么

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:148646
用户头像

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

关注

评论

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

如何用Apifox 的智能Mock功能?

Liam

前端 Mock

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

OpenHacker

Docker

冲刺!这篇1658页的《Java面试突击核心讲》学明白保底年薪30w

了不起的程序猿

Java java程序员 java面试 java编程

ST 端侧人工智能之视觉检测课程

贾献华

7月月更

SAP Fiori 应用 Adapt UI 动态显示或者隐藏的技术设计细节解析

Jerry Wang

JavaScript 前端开发 web开发 SAP 7月月更

iOS 中的代理模式

NewBoy

ios 前端 移动端 iOS 知识体系 7月月更

在线版 Python 图片转字符画

OpenHacker

Python

分布式锁用 Redis 还是 Zookeeper?

C++后台开发

redis zookeeper 分布式 后端开发 C++后台开发

裴丹:AIOps 智能运维经验分享

华为云开发者联盟

云计算 后端

SaaS应用:实现企业数字化转型的最佳途径

Baklib

自动化测试如何实施落地?

老张

软件测试 自动化测试 项目落地

开发实践丨昇腾CANN的推理应用开发体验

华为云开发者联盟

Python 人工智能

学习WEB前端去哪里培训比较好

小谷哥

2022年智能运维企业50强,博睿数据实力入选

博睿数据

数字化 智能运维 博睿数据 性能监测

Optional的使用详解

echoes

记录一次现场 mysql 重复记录数据的排查处理

安逸的咸鱼

MySQL 实战案例 7月月更

技术分享| 快对讲-5G对讲

anyRTC开发者

音视频 传输协议 快对讲 RAST

这些功能要是没有,我大 Pro 还怎么出来混!

CRMEB

版本通告|Apache Doris 1.1 Release 版本正式发布!

SelectDB

数据库 数据仓库 Doris apache doris 版本更新

企事业单位建设知识管理的七条建议

Baklib

知识管理 企事业单位

在武汉学习web前端开发课程哪家比较好

小谷哥

如何深入学习Html5前端技术知识

小谷哥

Free自由协议系统Dapp开发(锁仓复利)

薇電13242772558

智能合约 dapp

C 语言入门(五)

逝缘~

7月月更

那个从「四大」出来的小哥哥,后来怎么样了|ONES 人物

万事ONES

五分钟拿捏Python字典-Python3入门必备[字典详细操作]

迷彩

Python 字典 7月月更 入门教程

大模型训练难于上青天?效率超群、易用的“李白”模型库来了

OneFlow

机器学习 gpu 模型训练

连麦直播系统软件——语音聊天系统

开源直播系统源码

软件开发 直播源码 开源源码 连麦语音直播 语音聊天直播

JavaScript基础之值和引用

7月月更

在上海想学web前端课程如何选择

小谷哥

web前端开发技术前景怎么样好不好

小谷哥

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