Google对象描述语言Jsonnet应用浅谈

        JSON的应用场景和缺陷

        为什么要用Jsonnet取代JSON呢,就要从JSON的功能说起了。JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,是基于ECMAScript的一个子集,采用完全独立于语言的文本格式,同时也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等),由于JSON在各语言间支持友好、可读性强、数据性能上相比xml有很大优势,所以使JSON成为理想的数据交换语言。
 

        JSON的使用场景主要有三类:

        Web工程师最为熟悉的服务端和javascript的数据交换,常见ajax;

        各语言之间的数据交换,通常以Webservice的形式出现,常见的范式如jsonrpc, 和restful;

        应用的配置文件,很多应用采用json作为配置文件,比如前端bower.-> bower.json.  node.js的包管理器package.json ,PHP的包管理器composer.json。

        但是在用JSON做数据交换和配置文件时, 也会遇到很多问题:

        不能加注释;

        对象或数组最后一项后面不能有逗号;

        不支持变量、函数;

        不能用算术和逻辑运算;

        不能划分,不能复用,各个json文件之间彼此孤立;
 

        语法有些时候不太友好;
 

        key必须要加双引号;
 

        value是字符串时,不能用单引号。
 

        JSONNET的优势和应用
 

        JSONNET 的一些特性间接弥补了JSON的先天不足:
 

        key的双引号不是必须的;
 

        对象和数组最后一个属性后面可以有逗号;
 

        支持单行或多行注释;


         引用

 

         self: 当前对象
 

         $:根对象


 

         操作数据,支持常用的算术与逻辑运算符

 

        +: 数组(拼接)、字符串(连结)、对象(溶化)

 


 

        数组和对象深入

 


 

        模块化
 

         项目配置文件过大或数据文件过大,需要拆分,通过import引入

 


 

        函数与变量

 


 

        面向对象--继承


 

         {supper2} + {supper1} + {self}

 

         通过上面特性,我们可以发现JSONNET使JSON拥有了语言的特性:
 

        优点
 

        有注释,和后端开发协商接口很方便,模拟数据的文件可以直接作为接口文档
 

        制造模拟数据更加高效自然
 

        数据文件的可以切分和复用
 

         缺点
 

        Web场景下不能作为直接的数据交换格式
 

        学术型代码, 比较小众
 

        使用场景不多
 

        标准库不够完善,存留的issue较多
 

        比如排序问题
 

        不支持IO操作,不具备替代脚本语言的可能性
 

        使JSON变得更为复杂
 

        JSONNET提供内置的标准库(官网地址:http://jsonnet.org/docs/stdlib.html ),包括了一系列对象,字符串,BASE64的标准库,大家有兴趣可以自行下载。
 

        目前JSONNET的主要应用场景还是用来组织和生成JSON数据:
 

         有生成大批量JSON文件的需求
 

        作为JSON的模板引擎
 

         接口测试中模拟数据接口,通过JSONNET文件生成动态的JSON数据
 

        JSONNET 在透视宝的应用场景
 

        最后介绍一下JSONNET 在透视宝中的应用场景,透视宝在做数据呈现时主要依赖于后端的ElasticSearch构建的检索服务,ElasticSearch对外提供一组Webservice作为数据API接口,数据交换格式是JSON。
 

        ElasticSearch官方的QUERY DSL代码,相比透视宝实际需求的查询语法并不复杂,但是我们前端在构建这个请求时却不太方便,往往要通过拼接数组的方式将JSON序列化来构建这个QUERY。针对这种情况可以将语法抽象,用oo去构建这样的语法,借助elastica (elastic search 的一个客户端)实现。但是在代码调试中发现,为了构建一个json的查询,我们的程序员在这上面浪费了大量时间,因为要进行大量的语法对照翻译,既不直观,也影响效率。最后我们借助JSONNET 生成JSON文件,将每个查询制作为模板固化下来,复用性大大增加,这种方法在实际工作中效率很高,更加直观:
 

        JSON模板引擎
 

        透视宝前端es query查询
 

        模拟数据接口,通过JSONET动态生成JSON数据
 

        大数据场景
 

        数据自行解释
 

        数据压缩
 

        注:PHP的JSONNET实现是由云智慧的Neeke完成:
 
        http://pecl.php.net/package/jsonnet,大家可以参考源码学习一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值