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.

  • 相关阅读:
    Centos8 安装mongodb
    java 时间处理
    从技术走向管理李元芳履职记 读书记录
    debian基本操作
    centos8 安装kudu
    k8s api调用示例
    idea other settings
    C# Random生成相同随机数的解决方案
    DropDownList绑定选择数据报错问题
    离谱
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/4464981.html
Copyright © 2011-2022 走看看