在Erlang中将字符列表检测为字符串

时间:2017-06-30 00:50:55

标签: json erlang

我以递归方式解析地图以转换为json。这是我的o输出fn:

hash(Map) ->
  binary:bin_to_list(jiffy:encode(Map)).

atomJSON(Atom) -> binary:list_to_bin(atom_to_list(Atom)).

% json output
o(Number) when is_number(Number) ->
  Number;
o(Atom) when is_atom(Atom) ->
  atomJSON(Atom);
o(Tuple) when is_tuple(Tuple) ->
  o(tuple_to_list(Tuple), []);
o(List) when is_list(List) ->
  o(List, []);
o(Map) when is_map(Map) -> %expects atoms for internal map keys
  o(maps:keys(Map), Map, #{}).

o([], List) ->
  lists:reverse(List);
o([H | T], List) ->
  o(T, [o(H) | List]).

o([], _Map, Res) ->
  hash(Res);
o([H | T], Map, Res) ->
  o(T, Map, maps:put(atomJSON(H), o(maps:get(H, Map)), Res)).

大部分内容都转换为JSON。状态键&价值,是字符串,不是。

我知道erl shell可以方便地检测到字符串,但is_string/1不存在。如何检测字符串并进行转换,以便在javascript中显示正确的文本?

enter image description here

2> [123, 34, 115, 116, 97, 116, 117, 115, 34, 58].
"{\"status\":"

1 个答案:

答案 0 :(得分:0)

只需检查每个元素的值是否为8到255之间的整数。 但我认为Erlang做了这个工作。所以可能原因是你的数组中的某些元素的值不在8到255范围内。