0

我是新的 Clojurescript,想根据一个小的 json 文件用 clojurescript 和电子破解 arround。

我正在做类似的事情(使用中转/cljs)

(def jsondata (t/read (t/reader :json) (.readFileSync fs path_to_file "utf8")))) )

首先我检查状态是否正常,它工作正常......

(let [json_status (get jsondata "status")]
      (.log js/console "JSON Glossar Status:" json_status))

现在,我怎样才能访问 pages 数组中的一张地图,或者逐步浏览地图?

{"status":"ok",
    "pages":[
        {
            "id":1,
            "name":"name1",
            "image":"imagename1.png",
            "children":[
                {
                    "id":1,
                    "copytext":"kdjsldjsljfl"
                },
                {
                    "id":2,
                    "copytext":"dksdöfksöfklsöf"
                }
            ]
        },
        {
            "id":2,
            "name":"name1",
            "image":"imagename1.png",
            "children":[
                {
                    "id":4,
                    "copytext":"kdjsldjsljfl"
                },
                {
                    "id":5,
                    "copytext":"dksdöfksöfklsöf"
                }
            ]
        }
    ]
   }
4

2 回答 2

1

您可以将aget(即“数组获取”)用于嵌套的 ClojureScript / JavaScript 互操作。

例如,如果你想访问“pages”数组中的第二个地图项,你可以这样做:

(def my-js-object
  (clj->js {:status "ok"
            :pages [{:id 1
                     :name "foo"
                     :children []}
                    {:id 2
                     :name "bar"
                     :children []}]}))

(aget my-js-object "pages" 1)

在上面的代码中,我只是clj->js用来构造你的 JSON 的概念(和不完整)表示;我希望这足以说明问题。

我的 REPL 输出是:

#js {:id 2, :name "bar", :children #js []}

如果您想对每个页面项目做一些更复杂的事情,例如“映射每个页面哈希图并提取名称值”,那么您可以使用.-JS 属性访问器

(->> (.-pages my-js-object)
     (map #(.-name %)))

REPL 输出:

 ("foo" "bar")
于 2017-04-10T21:51:38.077 回答
0

为了不回答问题,您可以使用 js->cljs,https: //cljs.github.io/api/cljs.core/js-GTclj将您的 json 转换为普通的 Clojure 数据结构并使用 Clojure 普通 fns 来提取你想要的数据。

于 2017-04-12T18:29:26.913 回答