Fix bugs in Lisp project
- Numbers not being output in JSON format - Some empty collections not being properly output
This commit is contained in:
parent
17918710ee
commit
f6e8cfcbfd
1 changed files with 28 additions and 24 deletions
|
@ -38,30 +38,34 @@
|
|||
|
||||
;;; Serialization utilities
|
||||
(defun escape_jsonstring (list_of_chars)
|
||||
(let ((c (car list_of_chars)) (tail (cdr list_of_chars)))
|
||||
(cond
|
||||
((eql c #\")
|
||||
(concatenate 'list (list #\\ #\") (escape_jsonstring tail)))
|
||||
((eql c #\\)
|
||||
(concatenate 'list (list #\\ #\\) (escape_jsonstring tail)))
|
||||
((eql c #\backspace)
|
||||
(concatenate 'list (list #\\ #\b) (escape_jsonstring tail)))
|
||||
((eql c #\page)
|
||||
(concatenate 'list (list #\\ #\f) (escape_jsonstring tail)))
|
||||
((eql c #\linefeed)
|
||||
(concatenate 'list (list #\\ #\n) (escape_jsonstring tail)))
|
||||
((eql c #\return)
|
||||
(concatenate 'list (list #\\ #\r) (escape_jsonstring tail)))
|
||||
((eql c #\tab)
|
||||
(concatenate 'list (list #\\ #\t) (escape_jsonstring tail)))
|
||||
(if (null list_of_chars)
|
||||
NIL
|
||||
(let ((c (car list_of_chars)) (tail (cdr list_of_chars)))
|
||||
(cond
|
||||
((eql c #\")
|
||||
(concatenate 'list (list #\\ #\") (escape_jsonstring tail)))
|
||||
((eql c #\\)
|
||||
(concatenate 'list (list #\\ #\\) (escape_jsonstring tail)))
|
||||
((eql c #\backspace)
|
||||
(concatenate 'list (list #\\ #\b) (escape_jsonstring tail)))
|
||||
((eql c #\page)
|
||||
(concatenate 'list (list #\\ #\f) (escape_jsonstring tail)))
|
||||
((eql c #\linefeed)
|
||||
(concatenate 'list (list #\\ #\n) (escape_jsonstring tail)))
|
||||
((eql c #\return)
|
||||
(concatenate 'list (list #\\ #\r) (escape_jsonstring tail)))
|
||||
((eql c #\tab)
|
||||
(concatenate 'list (list #\\ #\t) (escape_jsonstring tail)))
|
||||
;;; Escape / if preceded by <, in case of ambiguity with XML closing tags
|
||||
((and
|
||||
(eql c #\<)
|
||||
(eql (car tail) #\/))
|
||||
(concatenate 'list (list #\< #\\ #\/) (escape_jsonstring (cdr tail))))
|
||||
((null tail)
|
||||
(list c))
|
||||
(t (cons c (escape_jsonstring tail))))))
|
||||
((and
|
||||
(eql c #\<)
|
||||
(eql (car tail) #\/))
|
||||
(concatenate 'list
|
||||
(list #\< #\\ #\/)
|
||||
(escape_jsonstring (cdr tail))))
|
||||
((null tail)
|
||||
(list c))
|
||||
(t (cons c (escape_jsonstring tail)))))))
|
||||
|
||||
;;; Generate a string of spaces
|
||||
(defun gen_indent (spaces)
|
||||
|
@ -164,7 +168,7 @@
|
|||
(defun do_jsonserialize (json_value indent indent_increment)
|
||||
(cond
|
||||
((numberp json_value)
|
||||
(write-to-string json_value))
|
||||
(marshal_jsonnumber json_value))
|
||||
((stringp json_value)
|
||||
(concatenate 'string
|
||||
'(#\")
|
||||
|
|
Loading…
Add table
Reference in a new issue