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.

  • 相关阅读:
    Django REST Framework
    Django REST Framework 序列化和校验 知识点
    Django REST Framework 数码宝贝
    浏览器的跨域解决方案
    Django Rest Framework 简介及 初步使用
    javaScript
    jQuery 事件流的概念
    jQuery 文档操作
    Django
    crm 系统项目(三) 业务
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/4464981.html
Copyright © 2011-2022 走看看