初学者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:
我尝试过的事情:
Error:Invalid encoding, expecting UTF-8, UTF-16 or UTF-32.[Code 29, Structure 0]
js/XMLHttpRequest
来解析同一个JSON文件而不会出现问题想法耗尽-有人可以帮忙吗?我想知道cljs-http是否无法理解它是一个json文件,我可以强制使用它吗?谢谢,
答案 0 :(得分:0)
我认为这是您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
启动项目时,需要花费几秒钟并启动带有该项目的新浏览器选项卡,在控制台上,我可以看到它记录了JSON文件的内容: