JSON文件的cljs-http GET请求的Clojurescript错误-格式错误

时间:2019-07-09 21:10:23

标签: json clojurescript clj-http

初学者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,但是https://jsonformatter.curiousconcept.com/解析文件并说Error:Invalid encoding, expecting UTF-8, UTF-16 or UTF-32.[Code 29, Structure 0]
  • 在Apache服务器上部署时出现相同的问题。我的.htaccess文件已正确设置为将内容标头发送至application / json,并将字符集发送至utf-8(尽管我已经读过,我应该使用大写字母发送UTF-8,但无法做到这一点)
  • 我可以毫无问题地解析具有相同功能的XML文件
  • 我可以使用弃用的js/XMLHttpRequest来解析同一个JSON文件而不会出现问题

想法耗尽-有人可以帮忙吗?我想知道cljs-http是否无法理解它是一个json文件,我可以强制使用它吗?谢谢,

1 个答案:

答案 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文件的内容:

enter image description here