2017-04-10 10 views
0

私は新しいClojurescriptであり、小さなjsonファイルに基づいてクローズコードと電子でarroundをハックしたいと思っています。ClojurescriptによるJsonデータの配列へのアクセス

私はのようなものをやっている状態が正常に動作している、OKであれば

(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)) 

(トランジット/ cljsで)、どのように私は1つにアクセスすることができますページ配列内のマップのうち、または地図をステップ実行しますか?

{"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" 
       } 
      ] 
     } 
    ] 
    } 

答えて

1

ネストされたClojureScript/JavaScript interopにはaget(つまり「配列取得」)を使用できます。例えば

あなたの「ページ」列に第2のマップ項目にアクセスしたい場合、あなたはこれを行うことができます:上記のコードで

(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") 
+0

私のキーは文字列型ですが、JSプロパティアクセサを使用できますか? – bluelemonade

+0

はい、キーは文字列になると予想されます。何も問題はないはずです。私の例で文字列キーを使用したとしても、REPLは結果を上記のように(JSデータ構造のキーワード表現で)出力します。 – Scott

+0

REPLで試してみてください。 JSに変換されるCLJSのキーワードと文字列の両方を使用できますが、文字列を使用してagetを介してプロパティにアクセスします。 – Scott

0

が、あなたは可能性が質問に答えていないために js-> cljs、https://cljs.github.io/api/cljs.core/js-GTcljを使用してjsonを通常のClojureデータ構造に変換し、Clojure normal fnsを使用して必要なデータを抽出します。

関連する問題