sile/jsone

J /= jsone:decode(jsone:encode(J).

Closed this issue · 2 comments

hi,

i thought that

J=jsone:decode(jsone:encode(J).

should hold true for any encodeble J but this not true as you can see from

J=[{a,1},{b,2}]. % which is a list of tuples

jsone:encode(J).
<<"{"a":1,"b":2}">>

jsone:decode(jsone:encode(J)).
#{<<"a">> => 1,<<"b">> => 2} % which is a map

is there anything i have missed?

e.

Because the type mapping between JSON and Erlang is not one-to-one, it is possible that there are cases where J /= jsone:decode(jsone:encode(J)).
You can control the types of the decoded Erlang objects by specifying options as follows:

1> J=[{a,1},{b,2}].                    
[{a,1},{b,2}] 
                                                                                                                                          
2> jsone:decode(jsone:encode(J), [{object_format, proplist}, {keys, attempt_atom}]).
[{a,1},{b,2}]

thanks for your answer.

i was not aware of the fact that json <-> erlang is not one-to-one.

so ithink, i've got to chane my interface data structures in a way that M=jsone:decode(jsone:encode(M)). is fulfilled.