Ai
10 Star 25 Fork 6

@lisp CAD应用云/@lisp 函数库

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
parse.lsp 2.01 KB
一键复制 编辑 原始数据 按行查看 历史
VitalGG 提交于 2022-08-22 23:34 +08:00 . json:parse
(defun json:parse (str)
"Json 字符串转化为 lisp 列表。"
"list"
(setq lst-str (vl-string->list str))
(setq flag-escape nil)
(setq flag-quote nil)
(setq flag-keylevel 0)
(setq flag-arraylevel 0)
(setq atom-str-lst '())
;;(setq res nil)
(while lst-str
(setq curr-char (car lst-str))
(cond
((= (ascii "\\") curr-char)
(setq flag-escape (not flag-escape))
(setq atom-str-lst (cons curr-char atom-str-lst))
)
((and (= (ascii "\"") curr-char)
(null flag-escape))
(setq flag-escape nil)
(setq flag-quote (not flag-quote))
(setq atom-str-lst (cons curr-char atom-str-lst))
)
(t
(setq flag-escape nil)
(if flag-quote
(setq atom-str-lst (cons curr-char atom-str-lst))
(cond
((= (ascii "{") curr-char)
;;对象 key/value mode
(setq flag-keylevel (1+ flag-keylevel))
(setq atom-str-lst (cons (ascii "(") atom-str-lst))
)
((= (ascii "[") curr-char)
;;array mode
(setq flag-arraylevel (1+ flag-arraylevel))
(if(= pre-char (ascii ":"))
(setq atom-str-lst (cons (ascii "(") (cdddr atom-str-lst)))
(setq atom-str-lst (cons (ascii "(") atom-str-lst)))
)
((= (ascii "}") curr-char)
;;对象 key/value mode
(setq flag-keylevel (1- flag-keylevel))
(setq atom-str-lst (cons (ascii ")") atom-str-lst))
)
((= (ascii "]") curr-char)
;;array mode
(setq flag-arraylevel (1- flag-arraylevel))
(setq atom-str-lst (cons (ascii ")") atom-str-lst)))
((= (ascii ":") curr-char)
;; 处理 key
(setq atom-str-lst
(cons (ascii " ")
(cons (ascii ".")
(cons (ascii " ") atom-str-lst))))
)
((= (ascii ",")curr-char)
;; value
(setq atom-str-lst
(cons (ascii "(")
(cons (ascii ")")
atom-str-lst)))
)
(t (setq atom-str-lst (cons curr-char atom-str-lst)))
))))
(setq pre-char curr-char)
(setq lst-str(cdr lst-str))
)
(read(strcat "(" (vl-list->string (reverse atom-str-lst)) ")"))
)
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Lisp
1
https://gitee.com/atlisp/atlisp-lib.git
git@gitee.com:atlisp/atlisp-lib.git
atlisp
atlisp-lib
@lisp 函数库
main

搜索帮助