Skip to content

JavaScript Implementation: AiSONについて

AiSON (AiScript Object Notation) は、AiScriptのメタデータ構文を基に作られたデータ交換用の構文です。

要素として関数を除く純粋なリテラルのみが許可されており、それ以外の式を含むと構文エラーとなります。

JSONに比べ、オブジェクトのkeyに"(ダブルクォーテーション)が必要ない・最終項の末尾に,(カンマ)がついていても許容されるなど、より柔軟で書きやすいものとなっています。

より厳密には:

  • トップレベルのオブジェクトはひとつしか許可されません。
  • 動的な式(関数・オブジェクトのvalueにたいする動的なバインディングなど)は許可されません。
  • 名前空間・メタデータはサポートされていません。
aiscript
{
	name: "example"
	version: 42
	keywords: ["foo", "bar", "baz"]
}

JavaScript API

AiSONをパースするための関数は@syuilo/aiscriptに内包されています。

AiSON.parseでAiSONの文字列からJavaScript Valueへの変換が可能です。シンタックスエラー時は errors.AiScriptSyntaxError がスローされます。

ts
import { AiSON } from '@syuilo/aiscript';

const data = AiSON.parse('{key: "value"}');

AiScript v1.2.0 以降では、AiSON.stringifyでJavaScript ValueからAiSONの文字列への変換が可能です。第一引数に変換したい値を、第三引数にインデント幅を指定します。第二引数はJSON.stringifyとインターフェイスの互換性を保つために未使用となっています(リプレイサー関数はサポートされていません)。

ts
import { AiSON } from '@syuilo/aiscript';

const data = { key: "value" };

// インデントなしで整形されたAiSON文字列を生成
const str1 = AiSON.stringify(data);

// インデント幅2で整形されたAiSON文字列を生成
const str2 = AiSON.stringify(data, null, 2);

// タブでインデントされたAiSON文字列を生成
const str3 = AiSON.stringify(data, null, '\t');