rontolisp:json-stringify
(rontolisp:json-stringify value)
Lisp の値を JSON ドキュメント文字列にシリアライズします(JavaScript の
JSON.stringify に相当)。rontolisp:json-parse
が生成する 2 つのオブジェクト表現 — キーワードをキーとする属性リスト
(plist)とハッシュテーブル(キーは文字列・シンボル・キーワード・数値) —
はどちらも JSON オブジェクトに戻ります。
値の対応
| Lisp | JSON |
|---|---|
nil | null |
t | true |
| 整数、浮動小数点数 | 数値 |
| 比 | 数値(float で変換) |
| 文字列 | 文字列(引用符・バックスラッシュ・制御文字はエスケープ) |
| キーワード、シンボル、文字 | 文字列(キーワードは先頭のコロンを除去) |
| キーワード/値が交互に並ぶ非空リスト | オブジェクト |
| その他のリスト | 配列 |
| ハッシュテーブル | オブジェクト(反復順序は未規定) |
それ以外(関数、ストリーム、プロミス、配列)はエラーを通知します。
JSON からパースした値は構造的にラウンドトリップします:
制限事項
- リストがオブジェクトとしてシリアライズされるのは、キーワード属性リスト
(
(:a 1 :b 2))の形をしている場合だけです。キーワードと値が交互に並ぶ 本物の配列は区別できず、オブジェクトになります。 nilは常にnullになります — 空の配列[]や(plist からの)空の オブジェクト{}を出力する方法はありません。後者は空のハッシュテーブルで 表現できます。- 出力中のハッシュテーブルのキー順序はバックエンド依存(未規定)です
(
maphashと同様)。 - 非 ASCII 文字はそのまま出力されます(
\uXXXXエスケープはしません)。 これは正しい JSON です。 - WASM バックエンドでは絶対値が 2³¹ 以上の浮動小数点数はシリアライズ できません(浮動小数点数フォーマッタがトラップします)。 WASM ガイド を参照してください。
バックエンドサポート
rontolisp:json-parse と同じく、すべての
バックエンド・すべての WASM モード(Preview 1 含む)で動作します:
シリアライザは rontolisp 自身で書かれており、使用時にプログラムへ
組み込まれてコンパイルされます。