文档章节

Jsonnet说明

EvansChang
 EvansChang
发布于 2019/04/25 11:50
字数 733
阅读 249
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

什么是Jsonnet

Jsonnet是Google开源的一门配置语言,用于弥补JSON所暴露的短板,它完全兼容JSON,并加入了JSON所没有的一些特性,包括注释、引用、算数运算、条件操作符、数组和对象深入、引入函数、局部变量、继承等,Jsonnet程序被编译为兼容JSON的数据格式。简单来说Jsonnet就是增强版JSON。

JSON的应用场景跟缺陷

JSON是一种轻量级的数据交换格式,是基于ECMAScript的一个子集,采用完全独立于语言的文本格式,同时也是用了类C的习惯,JSON在各语言间支持友好,可读性强,数据性能比XML好,所以JSON成为目前非常广泛的数据交换格式。

  • 使用场景
    • 前后端数据交互
    • 各语言之间的数据交互
    • 应用的配置文件
  • 缺陷
    • 不能加注释
    • 对象或数组最后一项后面不能有逗号
    • 不支持变量、函数
    • 不能用算数和逻辑运算
    • 不能划分,复用,文件隔离
    • key必须加双引号
    • value为字符时必须用双引号 Jsonnet对这些缺陷做了弥补,key的双引号不是必须,对象和数组最后一个属性可以有逗号,支持注释,支持算数运算等等。

Jsonnet功能

  • 注释 Jsonnet支持单行或多行注释

    /* This is demo comment*/
    { //This comment show for test
        key1:{
            "tom":[
                {kind:"man",test:1.0},
            ]
        }
    }
    
  • 引用

    Jsonnet中可以通过self引用当前对象,$引用根对象

    {
        test:{
            data:"data1",
            data2: self.data
        },
        test1:{
            data:$.test.data
        }
    }
    
  • 数据操作

    支持逻辑运算与算数运算

    {
        foo:4,
        bar: 2*self.foo,
        bar2:"this value is "+ self.bar+"."
        arrays:[1,2,3]+[4,5]//拼接
        equal: 1== 2
    }
    
  • 数组和对象深入

    {
        foo:[1,2,3],
        bar:[x*x for x in self.foo if x>=2],
        bar2:{["field"+x]: x for x in self.foo},
        obj:{["foo"+"bar"]:3},
    }
    
  • 模块化

    Jsonnet文件可进行拆分,拆分成多个小文件,每个文件里又是一个Jsonnet对象,通过import进行引入使用

  • 函数与变量

    //函数demo
    {
        qual_demo(size,value)::
        	if std.length(value) == 0 then
        		error "no data"
        	else [
                {kind: i,data: size/std.length(value)}
                for i in value
        	]
        id:: function(x) x,
    }
    
    //变量demo
    {
        local my_data = "data",
        data:{
            demo:my_data
        }
    }
    
  • 面向对象继承

    {
        demo:{
            data:"data1",
        },
        demo2: self["demo"]+{
            data2:"hello"
        }
    }
    

总结

Jsonnet加入了注释,等功能,拥有了语言的特性,制造模拟数据时更加高效方便,但是Jsonnet无法再web场景下作为直接的数据交换格式,并且比较小众,使用场景相对较少,标准库也不够完善,也变得更为复杂


感谢阅读这份文档

EvansChang
粉丝 6
博文 10
码字总数 6079
作品 0
海淀
程序员
私信 提问
加载中
请先登录后再评论。
[用事实说明两个凡是]一个由mysql事务隔离级别造成的问题分析

背景 最近要做一个批跑服务, 基本逻辑就是定时扫描数据库的记录, 有满足条件的就进行处理(一条记录代表一个任务,以下任务与记录含义相同). 要求支持多机部署批跑服务. 批跑支持多机部署实现方...

周翼翼
2015/11/24
3.8K
44
关于nodejs iconv的编码无效 说明

关于编码转换或许你从网络途径 得知是这样使用的 上面输出的结果还是乱码,并不能解码gbk 先最新的iconv不支持string解码了 查看最新官方文档下面是正确的解码方式

Rezeroer
2016/05/18
392
0
Python即时网络爬虫:API说明

API说明——下载gsExtractor内容提取器 1,接口名称 下载内容提取器 2,接口说明 如果您想编写一个网络爬虫程序,您会发现大部分时间耗费在调测网页内容提取规则上,不讲正则表达式的语法如何...

fullerhua
2016/06/22
1.1K
1
DTU 连接无公网IP服务器配置说明

DTU跟数据中心进行通信主要是通过主动发起与数据中心的通信连接, 由于 DTU处于移动内网,而且IP地址不固定。因此,只能由DTU主动连接数据中心,而不能由数据中心主动连接DTU。这就要求数据中...

winertech
2015/05/11
41
0
django下载安装说明

欢迎来9秒:www.9miao.com 1。将解压到django解压到某个目录里,例如d:python25django下面。打开一个 (cmd) 命令提示符窗口 然后进入到cd D:python25django , 输入命令python setup.py i...

loveguoguo
2013/09/24
17
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux拜拜!微软给WSL加入GPU支持,Windows终于迎来命令行包管理工具

点击蓝字“ 大白技术控 ”关注我哟 加个“星标★”,每日良时,好文必达! 白交 发自 凹非寺 量子位 报道 | 公众号 QbitAI 看完昨晚微软Build大会,虽然开发者不能亲自到现场,但看到WSL更新...

大白技术控
05/25
0
0
GraphQL

网文、分享汇总 干货分享 | GraphQL 数据聚合层 http://www.sohu.com/a/235978606_205771 awesome-graphql https://github.com/chentsulin/awesome-graphql 一些graphql相关的java项目 周边项......

素雷
20分钟前
4
0
如何在jQuery中选择具有多个类的元素? - How can I select an element with multiple classes in jQuery?

问题: I want to select all the elements that have the two classes a and b . 我想选择具有两个类a和b所有元素。 <element class="a b"> So, only the elements that have both classe......

javail
43分钟前
15
0
MySql查询所有字段不为空值的数据及Mybatis的#号和$符的区别引起的问题

1.MySql查询所有字段不为空值的数据 搜了一上午搜不到,最后用Mybatis的foreach标签,先查询出表字段, SELECT COLUMN_NAMEFROM INFORMATION_SCHEMA.ColumnsWHERE table_name='lltest'...

不忘初心牢记使命
43分钟前
32
0
五分钟搞定WebRTC视频录制

WebRTC中文社区是一个为大家解决在使用WebRTC当中遇到问题所建立的社区,欢迎更多学习和使用WebRTC的人加入进来,一起建设。 视频录制 在之前的文章里我们提到过视频录制的两种方式:客户端录...

死磕音视频
50分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部