(rontolisp) docs
← 関数

rontolisp:json-stringify

(rontolisp:json-stringify value)

Lisp の値を JSON ドキュメント文字列にシリアライズします(JavaScript の JSON.stringify に相当)。rontolisp:json-parse が生成する 2 つのオブジェクト表現 — キーワードをキーとする属性リスト (plist)とハッシュテーブル(キーは文字列・シンボル・キーワード・数値) — はどちらも JSON オブジェクトに戻ります。

値の対応

LispJSON
nilnull
ttrue
整数、浮動小数点数数値
数値(float で変換)
文字列文字列(引用符・バックスラッシュ・制御文字はエスケープ)
キーワード、シンボル、文字文字列(キーワードは先頭のコロンを除去)
キーワード/値が交互に並ぶ非空リストオブジェクト
その他のリスト配列
ハッシュテーブルオブジェクト(反復順序は未規定)

それ以外(関数、ストリーム、プロミス、配列)はエラーを通知します。

JSON からパースした値は構造的にラウンドトリップします:

制限事項

  • リストがオブジェクトとしてシリアライズされるのは、キーワード属性リスト ((:a 1 :b 2))の形をしている場合だけです。キーワードと値が交互に並ぶ 本物の配列は区別できず、オブジェクトになります。
  • nil は常に null になります — 空の配列 [] や(plist からの)空の オブジェクト {} を出力する方法はありません。後者は空のハッシュテーブルで 表現できます。
  • 出力中のハッシュテーブルのキー順序はバックエンド依存(未規定)です (maphash と同様)。
  • 非 ASCII 文字はそのまま出力されます(\uXXXX エスケープはしません)。 これは正しい JSON です。
  • WASM バックエンドでは絶対値が 2³¹ 以上の浮動小数点数はシリアライズ できません(浮動小数点数フォーマッタがトラップします)。 WASM ガイド を参照してください。

バックエンドサポート

rontolisp:json-parse と同じく、すべての バックエンド・すべての WASM モード(Preview 1 含む)で動作します: シリアライザは rontolisp 自身で書かれており、使用時にプログラムへ 組み込まれてコンパイルされます。