我试图从common lisp中的这段代码中获得一定的响应,但没有得到所需的结果,如果有人可以帮忙的话

问题描述 投票:0回答:1

在尝试使用下面的代码获得特定响应时,我没有得到。

我得到这个作为输出:

{"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))
common-lisp
1个回答
0
投票

您想要打印

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
© www.soinside.com 2019 - 2024. All rights reserved.