2017-04-10 6 views
0

새로운 Clojurescript이며 작은 json 파일을 기반으로하는 clourescript와 전자로 arround를 해킹하려고합니다.Clojurescript를 사용하여 Json Data의 배열에 액세스

내가 좋아하는 일을하고 있어요 상태가 잘 작동이 확인하는 경우

(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와) 어떻게 하나에 액세스 할 수 있습니다 페이지 배열의지도 또는지도를 통해 단계?

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

당신은 aget (즉, "배열이 얻을") 중첩 ClojureScript/자바 스크립트의 상호 운용성을 위해 사용할 수 있습니다. 당신이 당신의 "페이지"배열의 두 번째 맵 항목에 접근하기를 원한다면

예를 들어, 당신이 할 수 있습니다 :

(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를 사용하여 원하는 데이터를 추출하십시오.