Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 带粗箭头与冒号的映射(毒药-json解码)_Elixir_Elixir Poison - Fatal编程技术网

Elixir 带粗箭头与冒号的映射(毒药-json解码)

Elixir 带粗箭头与冒号的映射(毒药-json解码),elixir,elixir-poison,Elixir,Elixir Poison,到底有什么区别?为什么毒药会被破解!返回格式#2(我需要#1与exto.Changeset.change一起使用) Json响应取自API,看起来像 ab = %{a: 1} ac = %{"a" => 1} 毒药。解码!返回格式#2: 从广义上讲,来自应用程序外部的数据是不可信的。考虑到在长期运行的Erlang系统中,原子分配可能会导致内存耗尽,因此将原子用于外部数据会使您的应用程序面临潜在的拒绝服务(DoS)攻击 这一事实反映在许多Elixir库中,例如流行的JSON解析器。在将外部

到底有什么区别?为什么毒药会被破解!返回格式#2(我需要#1与exto.Changeset.change一起使用)

Json响应取自API,看起来像

ab = %{a: 1}
ac = %{"a" => 1}
毒药。解码!返回格式#2:

从广义上讲,来自应用程序外部的数据是不可信的。考虑到在长期运行的Erlang系统中,原子分配可能会导致内存耗尽,因此将原子用于外部数据会使您的应用程序面临潜在的拒绝服务(DoS)攻击

这一事实反映在许多Elixir库中,例如流行的JSON解析器。在将外部数据转换为内部数据结构时,性能良好的库通常使用字符串作为映射键

如果要将映射键从字符串转换为atom,可以执行以下操作:

ab = %{a: 1} # atom key you can access it like ab.a
ac = %{"a" => 1} # string key you can access it ac["a"]
iex>maps=%{“foo”=>“bar”}
%{“foo”=>“bar”}

iex>对于{key,val}使用
String.to_现有的_atom/1
,这样更安全一些。使用
String.to_atom/1
将完全打开此答案中提到的漏洞。此外,通过atom键访问值,如示例中的
ab.a
,也可以使用
ab[:a]
完成。括号语法是更通用的访问语法,而当键是atom时,点语法可用于映射和结构。
ab = %{a: 1} # atom key you can access it like ab.a
ac = %{"a" => 1} # string key you can access it ac["a"]
iex> maps = %{"foo" => "bar"}
%{"foo" => "bar"}
iex> for {key, val} <- maps, into: %{}, do: {String.to_atom(key), val}
%{foo: "bar"}