Skip to content

Question regarding encoding Map to JSON #141

Open
@mjvcallibrity

Description

@mjvcallibrity

Hello,

I currently am working on encoding an elixir map to JSON and noticed some things that I was confused by.

First I noticed that where I put True in my original Map gets encoded to Elixir.True. Why is that and how do I change that?

Second, the Content part of my map gets encoded to JSON with triple escapes. Is this expected behavior and is there a way to change that?

Any help you can offer would be greatly appreciated.

(Sorry if you read this before I made my edits. My original post came off sounding terse and without context. I had outlined what I wanted to ask and accidentally hit submit)

Here is the original Elixir Map I'm encoding:

@content_beginning ~s(<root available-locales="en_US" default-locale="en_US">  <dynamic-element name="content" type="text_area" index-type="keyword" instance-id="mwab">    <dynamic-content language-id="en_US"><![CDATA[)
@content_ending ~s(]]></dynamic-content>  </dynamic-element> </root>)

    body = Poison.encode!(%{
      "groupId" => 20143,
      "folderId" => 32641,
      "classNameId" => 0,
      "classPK" => 0,
      "autoArticleId" => True,
      "titleMap" => %{"en_US" => title},
      "descriptionMap" => %{"en_US" => "Default description"},
      "Content" => @content_beginning <> content <> @content_ending,
      "ddmStructureKey" => "BASIC-WEB-CONTENT",
      "ddmTemplateKey" => "BASIC-WEB-CONTENT",
      "displayDateMonth" => 1,
      "displayDateDay" => 1,
      "displayDateYear" => 2017,
      "displayDateHour" => 1,
      "displayDateMinute" => 1,
      "expirationDateMonth" => 1,
      "expirationDateDay" => 1,
      "expirationDateYear" => 2111,
      "expirationDateHour" => 1,
      "expirationDateMinute" => 1,
      "neverExpire" => True,
      "reviewDateMonth" => 1,
      "reviewDateDay" => 1,
      "reviewDateYear" => 2111,
      "reviewDateHour" => 1,
      "reviewDateMinute" => 1,
      "neverReview" => True,
      "Indexable" => True,
      "articleURL" => "my-url"
    })

And here is the resulting JSON:

"{\"titleMap\":{\"en_US\":\"invalidPhone\"},
\"reviewDateYear\":2111,
\"reviewDateMonth\":1,
\"reviewDateMinute\":1,
\"reviewDateHour\":1,
\"reviewDateDay\":1,
\"neverReview\":\"Elixir.True\",
\"neverExpire\":\"Elixir.True\",
\"groupId\":20143,
\"folderId\":32641,
\"expirationDateYear\":2111,
\"expirationDateMonth\":1,
\"expirationDateMinute\":1,
\"expirationDateHour\":1,
\"expirationDateDay\":1,
\"displayDateYear\":2017,
\"displayDateMonth\":1,
\"displayDateMinute\":1,
\"displayDateHour\":1,
\"displayDateDay\":1,
\"descriptionMap\":{\"en_US\":\"Default description\"},
\"ddmTemplateKey\":\"BASIC-WEB-CONTENT\",
\"ddmStructureKey\":\"BASIC-WEB-CONTENT\",
\"classPK\":0,
\"classNameId\":0,
\"autoArticleId\":\"Elixir.True\",
\"articleURL\":\"my-url\",
\"Indexable\":\"Elixir.True\",
\"Content\":\"<root available-locales=\\\"en_US\\\" default-locale=\\\"en_US\\\">  <dynamic-element name=\\\"content\\\" type=\\\"text_area\\\" index-type=\\\"keyword\\\" instance-id=\\\"mwab\\\">    <dynamic-content language-id=\\\"en_US\\\"><![CDATA[<p>Phone number entered does not appear to be valid.</p>]]></dynamic-content>  </dynamic-element> </root>\"}"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions