Anyone have any docs for idiomatic clojurescript for access a javascript object (returned as json, essentially a hash)?
I have a JSON object returned via an AJAX request:
{
list: [1,2,3,4,5],
blah: "vtha",
o: { answer: 42 }
}
How do I access these fields using clojurescript?
I can do:
(.-list data)
But how does this work when I have nested values and objects?
(.-answer (.-o data))
The above seems to be quite clumsy, especially given the nice js syntax of: data.o.answer.
What is the idiomatic way of accessing json objects with clojurescript?
Note:
I realised that I can actually refer to elements using JS syntax, which is quite handy actually. So the following will work correctly:
(str data.o.answer)
You probably want aget:
(aget foo "list")
aget isn't variadic yet, but hopefully will be soon
it's variadic now. (aget data "o" "answer")
would work
Firstly, your proposed syntax for nested access does work:
ClojureScript:cljs.user> (def data
(JSON/parse "{\"list\": \"[1,2,3,4,5]\", \"blah\": \"vtha\", \"o\": {\"answer\": \"42\"}}"))
#<[object Object]>
ClojureScript:cljs.user> (.-answer (.-o data))
"42"
You can use the threading macros...
ClojureScript:cljs.user> (-> data (.-o) (.-answer))
"42"
Or ..
notation
ClojureScript:cljs.user> (.. data -o -answer)
"42"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With