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.

  • 相关阅读:
    C# 封装miniblink 使用HTML/CSS/JS来构建.Net 应用程序界面和简易浏览器
    C# Winform实现炫酷的透明动画界面
    造轮子了!NETCore跨平台UI框架,CPF
    用HTML,Vue+element-UI做桌面UI
    造轮子,模仿WPF的UI框架,还没完善。。。
    C# Winform开发以及控件开发的需要注意的,被人问怕了,都是基础常识
    sublime 下面开发
    《快学Scala》
    linux中bin与sbin目录的作用及区别介绍
    hadoop深入研究:(十三)——序列化框架
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/4464981.html
Copyright © 2011-2022 走看看