ltgaxkeh

ltgaxkeh

How to map multi level json

Hi again! How do I map a multi level json (response after HTTPoison.get)

Here’s my json:

  [
      {
        "Payor": "ASMSI",
        "RevenueSource": "NEW MEMBER",
        "DateCreated": "2/1/2018 12:33:30 AM",
        "InvoiceDetails": [
          {
            "TransactionDetails": "Dependent",
            "TransCount": "45.00",
            "Rate": "112",
            "Total": "5040",
            "Vat": "0.00",
            "Vatable": "N",
            "TotalAmount": "5040"
          },
          {
            "TransactionDetails": "Extended Dependent",
            "TransCount": "8.00",
            "Rate": "112",
            "Total": "896",
            "Vat": "0.00",
            "Vatable": "N",
            "TotalAmount": "896"
          },
          {
            "TransactionDetails": "Principal",
            "TransCount": "22.00",
            "Rate": "560",

So far I only got this idea from my controller:

%{"InvoiceDetails" => invoicedetails} = Poison.decode!(response.body)

Most Liked

idi527

idi527

Map to what exactly, what shape of data do you want? If you want to decode a json object into an elixir map, you can use a json decoder, there are several.

The most popular is probably https://github.com/devinus/poison, with it your code would be like this:

resp = HTTPoison.get!(url)
json = Poison.decode!(resp)

Here, json is an elixir term, probably a map. So you’d be able to use it to populate your table.

Eiji

Eiji

You can’t do that directly, because you have list there. I will give you 4 example ways to achieve what you need:

  1. Get first item using List.first/1 or last item using List.last/1
  2. Get by specified index using Enum.at/2
  3. Iterate over list and do something for every item in it using Enum.each/2 or Enum.map/2 (depends on what you need).
  4. Find element which is interesting for you by using Enum.find/2

For example:

list = Poison.decode!(response.body)
first_item = List.first(list)
last_item = List.last(list)
n = 10
nth_item = Enum.at(list, n) # where n is integer
found_item = Enum.find(list, & &1["Payor"] == "ASMSI")

# Then you can fetch specified data as you wanted:
%{"InvoiceDetails" => invoicedetails} = first_item
%{"InvoiceDetails" => invoicedetails} = last_item
%{"InvoiceDetails" => invoicedetails} = nth_item
%{"InvoiceDetails" => invoicedetails} = found_item

# Or do something for every item in list

defmodule Example do
  def sample_each(list), do: Enum.each(list, &do_sample_each/1)

  defp do_sample_each(%{"InvoiceDetails" => invoicedetails}), do: IO.inspect(invoicedetails)

  def sample_map(list), do: Enum.map(list, &do_sample_map/1)

  defp do_sample_map(%{"InvoiceDetails" => invoicedetails}), do: invoicedetails
end

:ok = Example.sample_each(list) # debugs "InvoiceDetails" for every item
invoicedetails_list = Example.sample_map(list) # returns list of invoicedetails
sribe

sribe

I think it’s both. He’s struggling with creating an impossible pattern match in order to support an unworkable template structure.

ltgaxkeh

ltgaxkeh

Forgive me :no_mouth: I’m still a beginner in Elixir and MVC. I’m more of an OOP peep (.NET to be exact) :joy: Perhaps, I’m having difficulty understanding but I’m willing to learn.

Anyway, a big thanks for the response and effort.

Is there an approach for a concern like this where a beginner like me can understand?

sribe

sribe

Just tell us whether our responses made sense to you, and if not, try your best to explain your thinking so we can take another try :slight_smile:

Where Next?

Popular in Questions Top

dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
pgiesin
This should be a simple problem but I just can’t seem to figure it out. I have a standalone Elixir app that won’t find the database. Dep...
New
tduccuong
Hi, is there any work on GUI with Elixir, that is similar to Electron/Javascript? My idea is to bundle Phoenix and BEAM into a single se...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
Exadra37
Sometimes I want to check if the input into a function is not a blank string. My first approach: defmodule Example do def do_stuff(s...
New

Other popular topics Top

TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
273 38985 115
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30048 115
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
AstonJ
You’re a programmer, so you don’t need spoon feeding with the conventional drivel about “this is an integer.” No. You need to know what’s...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 49522 488
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
vac
Hi, I'm quite new in Elixir and I'm trying to format a string to a PEM format. I have the certificate value like MIIDBTCCAe2...... and ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New

We're in Beta

About us Mission Statement