zoukankan      html  css  js  c++  java
  • Google Proposes to Enhance JSON with Jsonnet

    Google has open sourced Jsonnet, a configuration language that supersedes JSON and adds new features without breaking backwards compatibility: comments, references, arithmetic and conditional operators, array and object comprehension, imports, functions, local variables, inheritance and others. Jsonnet programs are translated to compliant JSON data formats.

    Comments. Jsonnet accepts both C (/* …. */) and C++ (//… ) comment styles.

    References. The keyword self can be used to reference the current object, while the operator$ references the root object.

    Arithmetic and Conditional Operators. The operator adds numbers, strings, arrays, and objects. The == or != operators are evaluated to true or falseif works like the ternary operator ?: in C. Following are some Jsonnet operations and the resulting JSON code, taken from the language’s examples:

    // 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
    }

    Building Arrays and Objects. The for construct can be used to build arrays and objects as shown in the next sample:

    {
        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 }
    }

    Modularity. With Jsonnet the code can be split up into multiple files that are then accessed using import. Objects imported are then concatenated with other objects using +.

    Functions. Jsonnet values can contain functions which are marked as hidden fields which are not translated into JSON. Functions are used for various evaluations. An example can be seenhere.

    Jsonnet also features local variables, a way of inheriting objects by importing them and using the concatenation operator +, computed and optional fields.

    The Jsonnet language engine is implemented in C++11 and wrapped around with a C API for easier porting to other languages. C and Python libraries are provided. The C++ implementation can be compiled to JavaScript with Emscripten and an unofficial nodejs package is available.

  • 相关阅读:
    欢迎使用CSDN-markdown编辑器
    银行票据
    【思考】:怎样把论文按照一定格式生成模板?
    ARP地址解析协议
    ACL访问控制列表
    dns域名系统
    NAT网络地址转换
    MAC地址如何在windows与unix下查看?
    银行承兑汇票的推广与使用给中国企业带来的影响?
    win7 复制文件慢的解决方法
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/4464981.html
Copyright © 2011-2022 走看看