yeroc
Extracting All Items of List Inside Map
Hello all!
A bit stumped on interpreting how to parse and extract my desired data from an API’s response with HTTPoison and Poison. I think I’m missing something simple.
Let’s say I want all the applicant names from “https://data.sfgov.org/resource/jjew-r69b.json?” .
In IEx-
iex(1)> res = HTTPoison.get! "https://data.sfgov.org/resource/jjew-r69b.json?"
%HTTPoison.Response{
body: "[{\"dayorder\":\"3\",\"dayofweekstr\":\"Wednesday\",\"starttime\":\"1PM\",\"endtime\":\"3PM\",\"permit\":\"19MFF-00079\",\"location\":\"1377 FELL ST\",\"locationdesc\":\"1:05pm-3:00pm\",\"optionaltext\":\"Cold Truck: Pre-packaged sandwiches, snacks, fruit, various beverages\"...
iex(2)> body = Poison.decode! res.body, keys: :atoms
%{
addr_date_create: "2017-07-31T15:11:15.000",
addr_date_modified: "2017-08-01T10:49:12.000",
applicant: "Bonito Poke",
block: "3736",
cnn: "107000",
coldtruck: "N",
dayofweekstr: "Wednesday",
dayorder: "3",...
iex(3)> (hd body).applicant
"Liang Bai Ping"
As you can see from the JSON in the link, this is indeed the head, coming back to me in a string as I want after a bit of manipulation through HTTPoison and Poison. How would I go about calling and returning all of the heads and not just the head or tail?
Enum.map gives me nil
iex(4)> Enum.map(body, & &1["applicant"])
[nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, ...]
Thanks for any help ![]()
Marked As Solved
cloudytoday
In your Poison.decode! call you’re specifying keys: :atoms which constructs the resulting maps’ keys as atoms and not strings, but in your map call you’re providing a function which retrieves the field as it was a string (& &1[“applicant”]). I would recommend removing the keys: :atoms from the Poison.decode! call. Alternatively, you can do the same but with & &1.applicant.
Also Liked
cloudytoday
Oh I just meant that the alternative solution, if, for some reason, you really need them as atoms, would be to keep the keys: :atoms in the Poison call, and to just change the function in the Enum.map call so that it retrieves the atoms via map.atom_field syntax (it’s equivalent to some_map[:atom_key]). And if you don’t need them as atoms, then you can simply remove the keys: :atoms from the Poison call. ![]()
yeroc
Ah yes! Thanks for clarifying! ![]()
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








