在尝试使用下面的代码获得特定响应时,我没有得到。
我得到这个作为输出:
{"name": Bull,"age": 30,"city": Nowhere}
我想要的输出:
{"name": "John","age": "30","city": "Nowhere"}
以下是代码片段:
(defun create-json-object (key value)
(format nil "\"~a\": ~a" key value))
(defun example-json-encode ()
(let ((name "Bull")
(age 30)
(city "Nowhere"))
(let ((json-object (list (create-json-object "name" name)
(create-json-object "age" age)
(create-json-object "city" city))))
(format t "{~{~a~^,~}}" json-object))))
(print(example-json-encode))
您想要打印
name
和 city
字符串,以便可以将结果作为字符串读取。 ~A
格式指令旨在打印对人类来说看起来不错的结果。 ~S
指令用于打印 Lisp 阅读器可以读取的结果,因此它将打印引号。
将
create-json-object
更改为:
(defun create-json-object (key value)
(format nil "~s: ~s" key value))
此外,您还可以从
example-json-decode
返回一个字符串。当流指定为 format
时,*standard-output*
输出到 t
,但如果提供的流是 nil
,则输出到字符串。
(defun example-json-encode ()
(let ((name "John")
(age 30)
(city "Nowhere"))
(let ((json-object (list (create-json-object "name" name)
(create-json-object "age" age)
(create-json-object "city" city))))
(format nil "{~{~a~^,~}}" json-object))))
print
和 prin1
用于打印 Lisp 阅读器可以读取的对象。您应该使用 princ
或 format
以及适当的指令来打印供人类消费的对象。
CL-USER> (princ (example-json-encode))
{"name": "John","age": 30,"city": "Nowhere"}
"{\"name\": \"John\",\"age\": 30,\"city\": \"Nowhere\"}"
CL-USER> (format t "~%~a" (example-json-encode))
{"name": "John","age": 30,"city": "Nowhere"}
NIL