Emacs命令将JS对象转换为JSON

hpxqektj  于 2023-02-01  发布在  Mac
关注(0)|答案(3)|浏览(124)

是否有emacs库或命令将JS对象转换为JSON?
例如使用命令M-x wrap-to-json{a:"b", c:1}更改为{"a":"b", "c":1}

scyqe7ek

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))
dkqlctbz

dkqlctbz2#

简短的回答似乎是"不"。我做了一些(肤浅的)研究,处理JSON的Emacs包只有json.el(从23.1开始是标准发行版的一部分)和json-modejson-mode随package.el一起提供。前者处理JSON到elisp数据结构和从elisp数据结构序列化的问题,后者是编辑JSON的主要模式。
来源:Emacs Wiki

ymdaylpp

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(),它工作了:
下面是对我有效的函数:

(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()的参数。
(我没有足够的声誉来评论这个答案,而且有太多的待编辑)。

相关问题