# How to convert dict to json data correctly?

**URL:** <https://swi-prolog.discourse.group/t/how-to-convert-dict-to-json-data-correctly/6499>\
**Category:** General\
**Created:** [April 27, 2023, 2:04pm UTC](https://swi-prolog.discourse.group/t/how-to-convert-dict-to-json-data-correctly/6499 "2023-04-27T14:04:50Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![vancaho](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/vancaho/32/4243_2.png) [@vancaho](https://swi-prolog.discourse.group/u/vancaho)\
**Post date:** [April 27, 2023, 2:04pm UTC](https://swi-prolog.discourse.group/t/how-to-convert-dict-to-json-data-correctly/6499/1 "2023-04-27T14:04:50Z")

</div>

Hi I want to convert a dict to json data. But if I use the `atom_json_dict` and `atom_json_term`, the result is not correct.  
I define `convert_dict_to_json(Dict, Json) :- atom_json_dict(DictString, Dict,[]), atom_json_term(DictString, Json, []).`

Then I call `convert_dict_to_json(_{a:"a",b:"b"},X)`, it returns with `X = json([a=a, b=b]).`. In fact I think the result I want should be `X = json([a="a", b="b"])`.

If I want to convert dict to json correctly, i.e. `X = json([a="a", b="b"])`, how shall I write the `convert_dict_to_json` predicate?  
Thank you.

---

<div class="post-metadata">

**Author:** ![brebs](https://avatars.discourse-cdn.com/v4/letter/b/e9c0ed/32.png) [@brebs](https://swi-prolog.discourse.group/u/brebs)\
**Post date:** [April 27, 2023, 4:23pm UTC](https://swi-prolog.discourse.group/t/how-to-convert-dict-to-json-data-correctly/6499/2 "2023-04-27T16:23:21Z")

</div>

> [@vancaho](#):
>
> the result I want should

I suspect it’s not showing the quotes in the REPL, but would with [json\_write/2](https://www.swi-prolog.org/pldoc/doc_for?object=json_write/2)

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [April 27, 2023, 4:44pm UTC](https://swi-prolog.discourse.group/t/how-to-convert-dict-to-json-data-correctly/6499/3 "2023-04-27T16:44:26Z")

</div>

This worked for me:

```prolog
?- json_write_dict(user_output, _{a:"A",b:"b"}, [width(0),true(#(true)),false(#(false)),null(#(null))]).
{"a":"A", "b":"b"}
true.

```

If you want it in a string:

```prolog
?- with_output_to(string(String), json_write_dict(current_output, _{a:"A",b:"b"}, [width(0),true(#(true)),false(#(false)),null(#(null))])).
String = "{\"a\":\"A\", \"b\":\"b\"}".

```

---

<div class="post-metadata">

**Author:** ![vancaho](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/vancaho/32/4243_2.png) [@vancaho](https://swi-prolog.discourse.group/u/vancaho)\
**Post date:** [April 28, 2023, 3:28am UTC](https://swi-prolog.discourse.group/t/how-to-convert-dict-to-json-data-correctly/6499/4 "2023-04-28T03:28:15Z")

</div>

> [@peter.ludemann](#):
>
> `?- `

Thanks for your reply. But I want to convert `_{a:"a",b:"b"}` to `json([a="a", b="b"])`. How to do it?

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [April 28, 2023, 3:48am UTC](https://swi-prolog.discourse.group/t/how-to-convert-dict-to-json-data-correctly/6499/5 "2023-04-28T03:48:55Z")

</div>

> [@vancaho](#):
>
> I want to convert `_{a:"a",b:"b"}` to `json([a="a", b="b"])`.

```prolog
?- D=_{a:"A",b:"b"}, dict_pairs(D,_,P), maplist([K-V,K=V]>>true, P, J), JSON=json(J).
D = _{a:"A", b:"b"},
P = [a-"A", b-"b"],
J = [a="A", b="b"],
JSON = json([a="A", b="b"]).

```

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [April 28, 2023, 8:53am UTC](https://swi-prolog.discourse.group/t/how-to-convert-dict-to-json-data-correctly/6499/6 "2023-04-28T08:53:53Z")

</div>

> [@vancaho](#):
>
> But I want to convert `_{a:"a",b:"b"}` to `json([a="a", b="b"])`.

Why would you want that? There are read/write predicates for both representations, so I think you always can get/use the representation you prefer.
