首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LISP:如何用cl正确编码斜杠("/")?

LISP:如何用cl正确编码斜杠("/")?
EN

Stack Overflow用户
提问于 2020-02-06 21:37:20
回答 1查看 135关注 0票数 1

我的代码使用cl库将一行{"main" : "build/electron.js"}添加到package.json文件中:

代码语言:javascript
运行
复制
(let ((package-json-pathname (merge-pathnames *app-pathname* "package.json")))
  (let
    ((new-json (with-open-file (package-json package-json-pathname :direction :input :if-does-not-exist :error)
                  (let ((decoded-package (json:decode-json package-json)))
                    (let ((main-entry (assoc :main decoded-package)))                      
                      (if (null main-entry)
                        (push '(:main . "build/electron.js") decoded-package)
                        (setf (cdr main-entry) "build/electron.js"))
                      decoded-package)))))
    (with-open-file (package-json package-json-pathname :direction :output :if-exists :supersede)
      (json:encode-json new-json package-json))
  )
)

代码工作正常,但是结果有一个转义斜杠:

"main":"build\/electron.js"

我确信这是一件很简单的事情,但无论我尝试哪种输入-- "//“、”//“、"#//”--我仍然会得到转义斜杠。

如何才能在输出中得到一个正常的斜线?

此外,我也不确定是否有一种简单的方法可以获得打印良好的输出,或者是否需要编写这样的函数;现在,输出将整个package.json文件打印成一行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-07 09:40:22

特殊字符

JSON Spec表示“任何字符都可以转义”,但其中一些字符必须转义:“引号、反向solidus和控制字符”。链接部分后面跟着在转义字符列表中显示"solidus“(/)的语法。我不认为它在实践中真的很重要(通常不需要转义),但这可能解释了为什么库会转义这个角色。

如何避免逃跑

cl依赖于名为+json-lisp-escaped-chars+的转义字符的内部列表,即:

代码语言:javascript
运行
复制
(defparameter +json-lisp-escaped-chars+
  '((#\" . #\")
    (#\\ . #\\)
    (#\/ . #\/)
    (#\b . #\Backspace)
    (#\f . #\)
    (#\n . #\Newline)
    (#\r . #\Return)
    (#\t . #\Tab)
    (#\u . (4 . 16)))
  "Mapping between JSON String escape sequences and Lisp chars.")

符号不是导出的,但是您仍然可以用::从外部引用它。您可以动态地重新绑定需要使用不同转义字符列表的代码周围的参数;例如,您可以这样做:

代码语言:javascript
运行
复制
(let ((cl-json::+json-lisp-escaped-chars+
     (remove #\/ cl-json::+json-lisp-escaped-chars+ :key #'car)))
  (cl-json:encode-json-plist '("x" "1/5")))

这些指纹:

代码语言:javascript
运行
复制
{"x":"1/5"}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60103909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档