Fix bugs in Lisp project

- Numbers not being output in JSON format
- Some empty collections not being properly output
This commit is contained in:
Davide Depau 2022-12-09 23:32:37 +01:00
parent 17918710ee
commit f6e8cfcbfd

View file

@ -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
'(#\")