是否有emacs库或命令将JS对象转换为JSON?例如使用命令M-x wrap-to-json将{a:"b", c:1}更改为{"a":"b", "c":1}
M-x wrap-to-json
{a:"b", c:1}
{"a":"b", "c":1}
scyqe7ek1#
下面是一个通过管道连接节点来转换给定区域快速函数
(defun js->json () (interactive) (shell-command-on-region (region-beginning) (region-end) "node -e 'console.log(JSON.stringify(eval(require(\"fs\").readFileSync(0, \"utf-8\"))))'" (current-buffer) t))
dkqlctbz2#
简短的回答似乎是"不"。我做了一些(肤浅的)研究,处理JSON的Emacs包只有json.el(从23.1开始是标准发行版的一部分)和json-mode,json-mode随package.el一起提供。前者处理JSON到elisp数据结构和从elisp数据结构序列化的问题,后者是编辑JSON的主要模式。来源:Emacs Wiki
ymdaylpp3#
我尝试了@directed laugh的答案,但它给了我这个错误(在Emacs 27.1上):未定义:1 {a:1,b:2} ^语法错误:[eval]:1:47处的意外标记":"。runInThisContext(节点:vm:129:12)位于对象。runInThisContext(节点:vm:307:38)位于节点:内部/进程/执行:79:19处的[eval]- Package 器:6:22处的evalScript(节点:内部/进程/执行:78:60)位于节点:内部/主/eval_string:28:3节点. js版本18.13.0我修改了函数,将区域作为参数传递给JSON.stringify(),它工作了:下面是对我有效的函数:
JSON.stringify()
(defun json-stringify-region () (interactive) (shell-command-on-region (region-beginning) (region-end) (format "node -e 'console.log(JSON.stringify(%s))'" (buffer-substring (region-beginning) (region-end))) (current-buffer) t))
它的作用是使用Emacs内置函数shell-command-on-region执行node命令,该命令被格式化为使用标记区域作为JSON.stringify()的参数。(我没有足够的声誉来评论这个答案,而且有太多的待编辑)。
shell-command-on-region
node
3条答案
按热度按时间scyqe7ek1#
下面是一个通过管道连接节点来转换给定区域快速函数
dkqlctbz2#
简短的回答似乎是"不"。我做了一些(肤浅的)研究,处理JSON的Emacs包只有json.el(从23.1开始是标准发行版的一部分)和json-mode,json-mode随package.el一起提供。前者处理JSON到elisp数据结构和从elisp数据结构序列化的问题,后者是编辑JSON的主要模式。
来源:Emacs Wiki
ymdaylpp3#
我尝试了@directed laugh的答案,但它给了我这个错误(在Emacs 27.1上):
未定义:1 {a:1,b:2} ^
语法错误:[eval]:1:47处的意外标记":"。runInThisContext(节点:vm:129:12)位于对象。runInThisContext(节点:vm:307:38)位于节点:内部/进程/执行:79:19处的[eval]- Package 器:6:22处的evalScript(节点:内部/进程/执行:78:60)位于节点:内部/主/eval_string:28:3
节点. js版本18.13.0
我修改了函数,将区域作为参数传递给
JSON.stringify()
,它工作了:下面是对我有效的函数:
它的作用是使用Emacs内置函数
shell-command-on-region
执行node
命令,该命令被格式化为使用标记区域作为JSON.stringify()
的参数。(我没有足够的声誉来评论这个答案,而且有太多的待编辑)。