cljs-http GET 请求 JSON 文件的 Clojurescript 错误 - 格式错误
Clojurescript error with cljs-http GET request for JSON file - badly formed
这里是 Clojurist 初学者。我正在尝试使用 Clojurescript 和 cljs-http
库解析 JSON 文件。我使用以下函数有奇怪的行为:
(defn make-remote-call [endpoint]
(go (let [response (<! (http/get endpoint))]
(js/console.log (:body response)))))
这会将 json 文件打印到控制台,但我会收到此错误消息:
XML Parsing Error: not well-formed
Location: file:///***U2328710-data.json
Line Number 1, Column 1:
我尝试过的事情:
- JSON 文件通过 http://jsonlint.com with success, but https://jsonformatter.curiousconcept.com/ 解析文件并说
Error:Invalid encoding, expecting UTF-8, UTF-16 or UTF-32.[Code 29, Structure 0]
- 我在 Apache 服务器上部署时出现同样的问题。我的 .htaccess 文件已正确设置为将 content-header 发送到 application/json 并将字符集发送到 utf-8(尽管我读过我应该以大写形式发送 UTF-8,但无法做到那)
- 我可以毫无问题地解析具有相同功能的 XML 文件
- 我可以使用已弃用的
js/XMLHttpRequest
毫无问题地解析相同的 JSON 文件
运行 没有想法 - 有人可以帮忙吗?我想知道 cljs-http 是否不理解它是一个 json 文件,我可以强制它/也许覆盖 headers 吗?谢谢,
我认为这要么是您的 JSON 文件中的编码问题,要么是 cljs-http
库之外的其他问题。我 运行 使用 lein new figwheel json-client
创建的新项目进行了一个小测试,并将对 [cljs-http "0.1.46"]
的依赖添加到 project.clj
对于有效的 JSON 文件,我转到 https://api.github.com/users/clojure/repos 并将内容保存为项目文件夹中的 resources/public/repos.json
。
我的 core.clj
文件的内容是:
(ns json-client.core
(:require-macros [cljs.core.async.macros :refer [go]])
(:require [cljs-http.client :as http]
[cljs.core.async :refer [<!]]))
(enable-console-print!)
(defn make-remote-call [endpoint]
(go (let [response (<! (http/get endpoint))]
(js/console.log (clj->js (:body response)))))) ;; NOTE: cljs->js
(defonce app-state (atom {:text "Hello world!"}))
;; This content is served by figwheel, configured in project.clj
(make-remote-call "http://0.0.0.0:3449/repos.json")
(defn on-js-reload []
;; optionally touch your app-state to force rerendering depending on
;; your application
;; (swap! app-state update-in [:__figwheel_counter] inc)
)
注意:记录到控制台的行只有一个变化(使用clj->js
),仅此而已。
...当我用 lein figwheel
启动项目时,它需要几秒钟,然后用项目启动一个新的浏览器选项卡,在控制台上我可以看到它记录了 [=35= 的内容] 文件:
这里是 Clojurist 初学者。我正在尝试使用 Clojurescript 和 cljs-http
库解析 JSON 文件。我使用以下函数有奇怪的行为:
(defn make-remote-call [endpoint]
(go (let [response (<! (http/get endpoint))]
(js/console.log (:body response)))))
这会将 json 文件打印到控制台,但我会收到此错误消息:
XML Parsing Error: not well-formed
Location: file:///***U2328710-data.json
Line Number 1, Column 1:
我尝试过的事情:
- JSON 文件通过 http://jsonlint.com with success, but https://jsonformatter.curiousconcept.com/ 解析文件并说
Error:Invalid encoding, expecting UTF-8, UTF-16 or UTF-32.[Code 29, Structure 0]
- 我在 Apache 服务器上部署时出现同样的问题。我的 .htaccess 文件已正确设置为将 content-header 发送到 application/json 并将字符集发送到 utf-8(尽管我读过我应该以大写形式发送 UTF-8,但无法做到那)
- 我可以毫无问题地解析具有相同功能的 XML 文件
- 我可以使用已弃用的
js/XMLHttpRequest
毫无问题地解析相同的 JSON 文件
运行 没有想法 - 有人可以帮忙吗?我想知道 cljs-http 是否不理解它是一个 json 文件,我可以强制它/也许覆盖 headers 吗?谢谢,
我认为这要么是您的 JSON 文件中的编码问题,要么是 cljs-http
库之外的其他问题。我 运行 使用 lein new figwheel json-client
创建的新项目进行了一个小测试,并将对 [cljs-http "0.1.46"]
的依赖添加到 project.clj
对于有效的 JSON 文件,我转到 https://api.github.com/users/clojure/repos 并将内容保存为项目文件夹中的 resources/public/repos.json
。
我的 core.clj
文件的内容是:
(ns json-client.core
(:require-macros [cljs.core.async.macros :refer [go]])
(:require [cljs-http.client :as http]
[cljs.core.async :refer [<!]]))
(enable-console-print!)
(defn make-remote-call [endpoint]
(go (let [response (<! (http/get endpoint))]
(js/console.log (clj->js (:body response)))))) ;; NOTE: cljs->js
(defonce app-state (atom {:text "Hello world!"}))
;; This content is served by figwheel, configured in project.clj
(make-remote-call "http://0.0.0.0:3449/repos.json")
(defn on-js-reload []
;; optionally touch your app-state to force rerendering depending on
;; your application
;; (swap! app-state update-in [:__figwheel_counter] inc)
)
注意:记录到控制台的行只有一个变化(使用clj->js
),仅此而已。
...当我用 lein figwheel
启动项目时,它需要几秒钟,然后用项目启动一个新的浏览器选项卡,在控制台上我可以看到它记录了 [=35= 的内容] 文件: