BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GoogleはJsonnetでJSONの拡張を提案する

GoogleはJsonnetでJSONの拡張を提案する

ブックマーク

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

 

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

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

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

演算と条件演算子。+演算子、加算、文字列、配列、オブジェクト。==または!=演算子とtruefalseかの評価。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パッケージが公開されている。

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

この記事に星をつける

おすすめ度
スタイル

BT