用法
评论
建议
取 消
确 定
(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 (quote 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) (SETQ FLAG-KEYLEVEL (1+ FLAG-KEYLEVEL)) (SETQ ATOM-STR-LST (CONS (ASCII "(") ATOM-STR-LST))) ((= (ASCII "[") CURR-CHAR) (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) (SETQ FLAG-KEYLEVEL (1- FLAG-KEYLEVEL)) (SETQ ATOM-STR-LST (CONS (ASCII ")") ATOM-STR-LST))) ((= (ASCII "]") CURR-CHAR) (SETQ FLAG-ARRAYLEVEL (1- FLAG-ARRAYLEVEL)) (SETQ ATOM-STR-LST (CONS (ASCII ")") ATOM-STR-LST))) ((= (ASCII ":") CURR-CHAR) (SETQ ATOM-STR-LST (CONS (ASCII " ") (CONS (ASCII ".") (CONS (ASCII " ") ATOM-STR-LST))))) ((= (ASCII ",") CURR-CHAR) (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)) ")")))
函数库使用说明
应用包
技术支持
统计信息
函数库规模: 733 个
函数库类别: 51 种
上传记录
刷新