如何将表示 JSON 数据的字符串转换为 Common Lisp 中 curl 符号上的字符串?
How to convert a string representing JSON data to a string on the curl notation in Common Lisp?
我正在使用 Steel Bank Common Lisp (SBCL)、Emacs 和 Slime。
执行函数后,我有:
CL-USER> (my-function my-data)
"{\"key-1\": \"value-1\"}"
我想将字符串 "{\"key-1\": \"value-1\"}"
转换为 curl 上的 REST 请求符号,因此字符串为:key-1&value-1
举例说明应用程序,这将是 data
on curl:
curl --request POST --data "userId=key-1&value-1" https://jsonplaceholder.typicode.com/posts
解决方法是:
(ql:quickload :yason)
(defun json-string-to-rest-request (json-string)
(destructuring-bind (a b) (alexandria:hash-table-plist (yason:parse json-string))
(format nil "~a&~a" a b)))
您可以通过以下方式申请:
(defparameter *json-string* "{\"key-1\": \"value-1\"}")
(defparameter *json-string-1* "{\"KeY-1\": \"value-1\"}")
(json-string-to-rest-request *json-string*)
;; => "key-1&value-1"
(json-string-to-rest-request *json-string-1*)
;; => "KeY-1&value-1"
在此之前,我试过:
(ql:quickload :cl-json)
(defun json-string-to-rest (json-string)
(with-input-from-string (s json-string)
(destructuring-bind ((a . b)) (cl-json:decode-json s)
(format nil "~a&~a" (string-downcase a) b))))
(json-string-to-rest *json-string*)
;; => "key-1&value-1"
然而,缺点是 cl-json:decode-json
首先将 json 字符串转换为 ((:KEY-1 . "value-1"))
- 因此在使用 json 键字符串时区分大小写会丢失15=].
包 yason
reads-in 键作为字符串,因此在键字符串中保留 case-sensitivity。
我正在使用 Steel Bank Common Lisp (SBCL)、Emacs 和 Slime。
执行函数后,我有:
CL-USER> (my-function my-data)
"{\"key-1\": \"value-1\"}"
我想将字符串 "{\"key-1\": \"value-1\"}"
转换为 curl 上的 REST 请求符号,因此字符串为:key-1&value-1
举例说明应用程序,这将是 data
on curl:
curl --request POST --data "userId=key-1&value-1" https://jsonplaceholder.typicode.com/posts
解决方法是:
(ql:quickload :yason)
(defun json-string-to-rest-request (json-string)
(destructuring-bind (a b) (alexandria:hash-table-plist (yason:parse json-string))
(format nil "~a&~a" a b)))
您可以通过以下方式申请:
(defparameter *json-string* "{\"key-1\": \"value-1\"}")
(defparameter *json-string-1* "{\"KeY-1\": \"value-1\"}")
(json-string-to-rest-request *json-string*)
;; => "key-1&value-1"
(json-string-to-rest-request *json-string-1*)
;; => "KeY-1&value-1"
在此之前,我试过:
(ql:quickload :cl-json)
(defun json-string-to-rest (json-string)
(with-input-from-string (s json-string)
(destructuring-bind ((a . b)) (cl-json:decode-json s)
(format nil "~a&~a" (string-downcase a) b))))
(json-string-to-rest *json-string*)
;; => "key-1&value-1"
然而,缺点是 cl-json:decode-json
首先将 json 字符串转换为 ((:KEY-1 . "value-1"))
- 因此在使用 json 键字符串时区分大小写会丢失15=].
包 yason
reads-in 键作为字符串,因此在键字符串中保留 case-sensitivity。