gpt4 book ai didi

json - 如何将 emacs 连接到 json 服务?

转载 作者:行者123 更新时间:2023-12-04 17:19:00 29 4
gpt4 key购买 nike

我对 emacs 编程了解不多,但我确实知道如何用 Lispy 语言编程。我有一项服务可以监视项目目录并通过类似 rest 的 Web 界面产生结果。我想将 emacs 连接到该服务中,并且可能使用这种方案为 emacs 编写一些功能。我不确定从 emacs 方面从哪里开始。那么哪些库最适合访问 Web 服务呢?

最佳答案

Emacs 对这种事情有很好的内置支持,至少在发出请求和解析响应的基本级别上是这样。使用url-retrieveurl-retrieve-synchronously从远程服务获取数据。顾名思义,一个是异步调用,它接受回调,另一个是阻塞调用,它返回一个包含响应的缓冲区。通过包含 (require 'url) 加载它们在您的 Elisp 文件中。
url-函数记录在与 Elisp 其余部分不同的 Info 手册中,名为“URL”,但其中未提及一些有用的功能。对于在 URL 中传递参数的 GET 请求,url-build-query-string函数对于从键和值的 a-list 构造查询参数字符串很有用。对于 POST、PUT、DELETE 等请求,可能需要 let-bind 变量 url-request-data , url-request-methodurl-request-extra-headers .他们有信息丰富的文档字符串。

关于对 HTTP URL 使用这些调用的最后一个令人困惑的事情是,它们将 HTTP 响应 header 与响应主体放在同一个缓冲区中,这可能不是您所期望的。处理此问题的一种简单方法是使用(未记录的)url-http-end-of-headers变量在处理正文之前跳过标题,尽管我怀疑可能有更好的方法。

使用 json-read解析 JSON 响应并绑定(bind)变量 json-array-type 的函数, json-object-type , 和 json-key-type控制 JSON 类型如何转换为 Lisp 类型。这个函数是通过包含(require 'json)得到的。 .可以使用 xml-parse-region 解析 XML 响应或 libxml-xml-parse-region .后者需要 Emacs 编译时支持 libxml,前者在 Elisp 中实现。

综上所述,对 JSON 服务的请求的框架如下所示:

(url-retrieve
"http://example.com/api/some/request"
(lambda (events)
(goto-char url-http-end-of-headers)
(let ((json-object-type 'plist)
(json-key-type 'symbol)
(json-array-type 'vector))
(let ((result (json-read)))
;; Do something with RESULT here
))))

在回调中,您可以使用 result像任何其他 Lisp 值一样。 plist-get , pcasecl-destructuring-bind函数通常对于提取结果片段很有用。使用 (require 'pcase)获取 pcase宏, (require 'cl-lib)获取 cl-destructuring-bind .

关于json - 如何将 emacs 连接到 json 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692558/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com