AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

如何快速理解网络IO模型

Dinfan

Netty 事件循环 IO模型 Reactor多线程 网络io模型

100Wqps短链系统,怎么设计?

小小怪下士

Java 程序员 后端 QPS

MongoDB源码学习:执行创建Collection命令

云里有只猫

mongodb 源码解析

设计模式-策略模式

蓬蒿

设计模式 策略模式

"鸿蒙生态专家面对面"三月专场等你前来!

HarmonyOS开发者

DevData Talks 直播预告 | 微众银行的研发效能实践有哪些经验?

思码逸研发效能

研发效能 DevData Talks

Next.js 实践:从 SSR 到 CSR 的优雅降级

Crazy Urus

React nextjs SSR

优秀软件工程师必备的五大技能,快看你还差什么?

飞算JavaAI开发助手

百度生成式AI产品文心一言邀请测试,五大场景、五大能力革新生产力工具

飞桨PaddlePaddle

百度 飞桨 文心一言

使用价值三角方法来全方位分析产品

产品海豚湾

产品 产品经理 产品设计 产品运营 商业洞察

Matlab常用图像处理命令108例(七)

timerring

图像处理

Spring Boot中如何优雅地实现异步调用?

JAVA旭阳

Java springboot

Capital

Echo_Wish

学习 进步 笔记 资源 本质

Go语言实现策略模式

蓬蒿

策略模式

如何测试一个AI系统?

陈磊@Criss

AI 测试

在追求卓越的路上,面对压力时,推荐你这二个做法。

叶小鍵

Toast的基本使用

芯动大师

android Adapter toast

NodeJS 实战系列:模块设计与文件分类

光毅

JavaScript node.js

在 windows 上连接 wsl 和直接打开 ubantu 有什么区别?

玄兴梦影

wsl window

PyTorch深度学习实战 | 基于ResNet的人脸关键点检测

TiAmo

深度学习 人脸识别 PyTorch

聊聊「订单」业务的设计与实现

Java 架构 订单管理 订单系统 订单

vivo 短视频用户访问体验优化实践

vivo互联网技术

CDN HTTP 优化 DNS 实践

深圳.NET线下技术沙龙倒计时一天

MASA技术团队

.net MASA

如何应用BI系统运营提效,一起看看瓴羊Quick BI的表现

对不起该用户已成仙‖

GPT-4炸圈--多模态大模型

江湖修行

人工智能 大模型 GPT ChatGPT GPT-4

想到哪说到哪的AI

FN0

AIGC

内部开发者门户是什么?

SEAL安全

微服务 企业号 3 月 PK 榜 内部开发者门户 信息碎片化

Nacos心跳机制实现快速上下线

做梦都在改BUG

Java Spring Cloud nacos 心跳机制

低代码四大典型使用场景,你都知道吗?

飞算JavaAI开发助手

使用 Athena (Presto) 分析本地 Oracle 数据库导出的数据

亚马逊云科技 (Amazon Web Services)

李彦宏文心一言发布会 highlight

B Impact

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