原文(投稿日：2015/04/21)へのリンク

Googleは、互換性を維持しつつ、新しい機能を追加したJSONに取って代わる設定言語であるJsonnetをオープンソース化した: コメント、参照、演算と条件演算子、配列、オブジェクト内包表記、インポート、関数、ローカル変数、継承など。Jsonnetプログラムは、JSON準拠データフォーマットに変換される。

コメント Jsonnetは、C( /* ….*/ )とC++ ( //… )の両方のコメントスタイルを許容する。

参照。 self キーワードは現在のオブジェクトを参照、 $ オペレーターはルートオブジェクトを参照する

演算と条件演算子。 + 演算子、加算、文字列、配列、オブジェクト。 == または != 演算子と true か false かの評価。 if は、Cの三項演算子 ?: のように動作する。以下は、いくつかのJsonnet演算子と言語の例から抽出した結果のJSONコード:

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

配列とオブジェクトの構築。 for は、以下のサンプルに示される配列とオブジェクトを構築する:

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

モジュール。Jsonnetコードは複数のファイルに分割することができ、 import を使ってアクセスされる。インポートされたオブジェクトは、 + を使って他のオブジェクトと連結される。

関数。Jsonnetの値には、JSONに翻訳されない隠しフィールドとして関数を含めることができる。関数は様々な評価のために使用することができる。例はここで見ることができる。

Jsonnetはまた、ローカル変数、インポートや結合演算子 + を使ってオブジェクトを継承する方法、計算されたフィールドとオプショナルフィールドの機能を持つ。

Jsonnet言語エンジンはC++11で実装されていて、他の言語に簡単に移植できるようにC APIでラップされている。CとPythonライブラリは提供されている。C++実装はEmscriptenでJavaScriptにコンパイルされ、非公式のnodejsパッケージが公開されている。

詳細は、言語仕様と他の設定言語との比較をお薦めする。