cl-defstruct 定义出来的不能使用 json-encode 吗

我猜可能是这样,record/struct 需要知道它的结构才有意义,而它的实例只保留了各个字段的 value,所以没法转成 key/value 形式。

#+BEGIN_SRC elisp
(cl-defstruct (person (:constructor person-create)
                      (:copier nil))
  name age sex)

(person-create :name "Tom" :age 20 :sex "Male")
#+END_SRC

#+RESULTS:
: #s(person "Tom" 20 "Male")

当然要转也不是不可能,只要数据能读取就能转:

  1. 转成key/value 形式,

    给 json-encode 增加一个字段描述的参数:

     (json-encode tom (cl-struct-slot-info 'person))
    

    或者实现一个 struct-to-alist 还更靠谱:

     (json-encode (struct-to-alist tom 'person)
    
  2. 当作 list 对待。先把 record 转成 list,然后转 json。