⚡
Zig版JSONみたいな「ZON」について
ZON(Zig Object Notation)は、Zigで使われているテキストファイルフォーマットです。
ZONはZigのビルドシステムのbuild.zig.zon
で使われています。
JSONの構文がJavaScriptのオブジェクトの表記法に由来しているように、ZONの構文はZigの文法に由来しています。
ZONの構文は基本的にZigの文法のサブセットですが、Zigとは異なりNaNと無限大を表すリテラル(nan
、inf
)があるという違いがあります。
例
.{
.a = 1.5,
.b = "hello, world!",
.c = .{ true, false },
.d = .{ 1, 2, 3 },
}
JSONとの違い
JSONとは異なり、ZONはコメントを書くことができます。
// コメント
10
また、末尾にコンマを付けることができます。
with_comma.zon
.{
.a = 1.5,
.b = "hello, world!",
.c = .{
true,
false,
},
.d = .{
1,
2,
3,
},
}
without_comma.zon
.{ .a = 1.5, .b = "hello, world!", .c = .{ true, false }, .d = .{ 1, 2, 3 } }
以下のようにZONファイルに対してzig fmt
を実行することでフォーマットできます。
$ zig fmt foo.zon
foo.zon
整数リテラルは10進数以外に2進数、8進数、16進数でも表記できます。
.{
.hex = 0xff,
.octal = -0o77,
.binary = 0b11,
}
シリアライズとデシリアライズ
Zig 0.14.0で追加されたstd.zon
を使うことでZONのシリアライズとデシリアライズができます。
std.zon.parse
の提供する機能でデシリアライズができ、std.zon.stringify
の提供する機能でシリアライズができます。
また、以下のように@import
を使うとコンパイル時にZONをデシリアライズできます。
const foo: Foo = @import("foo.zon");
Discussion