Emacs 对 JSON(JavaScript 对象表示法)的支持提供了多个函数, 用于在 Lisp 对象和 JSON 值之间进行转换。任何 JSON 值都可转换为 Lisp 对象,但反之则不一定。 具体规则如下:
true、null、false。其中 true 对应 Lisp 符号 t;
默认情况下,null 和 false 分别对应符号 :null 和 :false。
assq 函数的行为,仅使用第一个元素进行序列化。
注意:nil 既是有效的关联列表也是有效的属性列表,它表示 {}(空 JSON 对象),
而非 null、false 或空数组—这些是不同的 JSON 值。
若某个 Lisp 对象无法转换为 JSON 格式,序列化函数会抛出类型为 wrong-type-argument 的错误。
解析函数还可能抛出以下错误:
json-unavailable当解析库不可用时抛出。
json-end-of-file当输入文本提前结束时抛出。
json-trailing-content当解析完第一个 JSON 对象后仍遇到意外输入时抛出。
json-parse-error当遇到无效的 JSON 语法时抛出。
顶层值及其内部的子对象均可序列化为 JSON。同样,解析函数会返回上述所有可能的类型。
该函数返回一个新的 Lisp 单字节字符串,其中包含 object 的 JSON 表示形式。 参数 args 是一组关键字/参数对,支持以下关键字:
:null-object该值指定用于表示 JSON 关键字 null 的 Lisp 对象,默认为符号 :null。
:false-object该值指定用于表示 JSON 关键字 false 的 Lisp 对象,默认为符号 :false。
该函数将 object 的 JSON 表示形式插入到当前缓冲区的光标位置之前。
参数 args 的解析规则与 json-serialize 相同。
该函数解析 string 中的 JSON 值(string 必须是 Lisp 字符串)。
若 string 不包含有效的 JSON 对象,该函数会抛出 json-parse-error 错误。
参数 args 是一组关键字/参数对,支持以下关键字:
:object-type该值指定用于表示 JSON 对象键值映射的 Lisp 对象类型:可选 hash-table(默认,使用字符串作为键的哈希表)、
alist(使用符号作为键的关联列表)或 plist(使用关键字符号作为键的属性列表)。
:array-type该值指定用于表示 JSON 数组的 Lisp 对象类型:可选 array(默认,使用 Lisp 数组)或 list(使用列表)。
:null-object该值指定用于表示 JSON 关键字 null 的 Lisp 对象,默认为符号 :null。
:false-object该值指定用于表示 JSON 关键字 false 的 Lisp 对象,默认为符号 :false。
该函数从当前缓冲区的光标位置开始读取下一个 JSON 值。若读取到有效的 JSON 对象,
则将光标移动到该值的末尾位置;否则抛出 json-parse-error 错误且不移动光标。
参数 args 的解析规则与 json-parse-string 相同。