写点什么

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

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

关注

评论

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

icon图标设计制作 Image2icon最新激活版中文

胖墩儿不胖y

图标制作 图标工具 icon

如何通过PG-Pool-II来搭建一个高可用Postgresql集群

Kevin_913

数据库 postgresql 高可用集群

2023-10-04:用go语言,现有一棵无向、无根的树,树中有 n 个节点,按从 0 到 n - 1 编号 给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges , 其中 edge

福大大架构师每日一题

福大大架构师每日一题

支持宽屏格式的音乐播放器 Swinsian免激活最新

胖墩儿不胖y

实测 亚马逊 AI 编程助手 Amazon CodeWhisperer(全网最全)

亚马逊云科技 (Amazon Web Services)

人工智能 存储 亚马逊云科技

Ae视频特效工具:After Effects 2023激活中文最新版

胖墩儿不胖y

Mac软件 AE 视频特效软件

探索Redis与MySQL的双写问题:挑战与解决方案

Java随想录

Java MySQL redis

人生最优解:体验最极致的人生

少油少糖八分饱

人生 回忆 体验 阅读笔记 死前归零

mac平台上好用的解压缩工具:RAR Extractor激活中文版

mac大玩家j

Mac软件 解压软件 解压缩工具

布隆过滤器:原理与应用

Java随想录

Java redis

打造完美RAW文件处理流程!Adobe Camera Raw插件功能详解!

南屿

Camera Raw激活版 CameraRaw mac版 raw图像 Camera Raw 15

Delicious Retouch 5 (DR 5)汉化激活版 高效解决人像磨皮!

南屿

DR5白金版 PS一键磨皮插件 Delicious Retouch 5 DR5汉化版 Photoshop修图插件

ERC20代币开发如何影响区块链环境

区块链软件开发推广运营

数字藏品开发 dapp开发 区块链开发 链游开发 NFT开发

超清动态壁纸软件Dynamic Wallpaper 最新激活中文版

mac大玩家j

动态壁纸 Mac软件 视频动态壁纸 壁纸软件

火山引擎ByteHouse与白鲸开源完成兼容性认证,加速数据价值释放

字节跳动数据平台

大数据 数据仓库 云原生 大数据仓库 企业号9月PK榜

兼顾友好与安全,隐私协议 Unijoin 助推新一轮 Web3 浪潮

股市老人

ps滤镜Neural Filters完整版 for Mac 无需登陆Adobe Id

南屿

PS滤镜插件 Neural Filters滤镜 神经滤镜Neural Filters photoshop神经滤镜 Neural Filters下载

AE镜头光晕插件Optical Flares汉化版 optical flares插件安装方法(含注册码)

南屿

AE镜头光晕插件 Optical Flares注册码 Optical Flares插件安装

可以替代访达的文件管理器 Path Finder 激活中文版

mac大玩家j

文件管理 Mac软件 文件管理器

活动报名与缴费小程序开发笔记一

CC同学

【中秋国庆不断更】HarmonyOS对通知类消息的管理与发布通知(下)

HarmonyOS开发者

【中秋国庆不断更】OpenHarmony多态样式stateStyles使用场景

OpenHarmony开发者

Python 列表操作指南3

小万哥

Python 程序员 软件 后端 开发

Trapcode套装插件Particular粒子插件安装教程 附Particular序列号

南屿

Trapcode Particular插件 3D粒子插件 After Effects

国庆假期,我用Flutter写了个我自己都玩不赢的五子棋AI🤣

编程的平行世界

flutter 游戏

稳定币发行服务:为波动的市场带来稳定

区块链软件开发推广运营

数字藏品开发 dapp开发 区块链开发 链游开发 NFT开发

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