Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
Json 毒药:无法对值进行编码_Json_Elixir_Ecto_Elixir Poison - Fatal编程技术网

Json 毒药:无法对值进行编码

Json 毒药:无法对值进行编码,json,elixir,ecto,elixir-poison,Json,Elixir,Ecto,Elixir Poison,我无法对从EXTO查询结果中获得的值进行编码 控制器代码: def companies(conn, params) do companies = Repo.all( from( c in Company, select: {c.name, c.uid}, limit: 20 ) ) conn |> put_resp_header("content-type", "applicatio

我无法对从EXTO查询结果中获得的值进行编码

控制器代码:

def companies(conn, params) do
    companies = Repo.all(
      from(
        c in Company,
        select: {c.name, c.uid},
        limit: 20
      )
    ) 

    conn
    |> put_resp_header("content-type", "application/json; charset=utf-8")
    |> send_resp(200, Poison.encode!(companies, pretty: true))
end
模板代码:

<div class="form-group row">
  <%= label f, :company_id, class: "control-label" %>
  <%= select f, :company_id, @companies, class: "form-control"%>
<%= error_tag f, :company_id %>
Request: GET /companies
** (exit) an exception was raised:
    ** (Poison.EncodeError) unable to encode value: {"Loews Corporation", 1000285930}
        (poison) lib/poison/encoder.ex:383: Poison.Encoder.Any.encode/2
        (poison) lib/poison/encoder.ex:268: anonymous fn/4 in Poison.Encoder.List.encode/3
        (poison) lib/poison/encoder.ex:269: Poison.Encoder.List."-encode/3-lists^foldr/2-0-"/3
        (poison) lib/poison/encoder.ex:269: Poison.Encoder.List.encode/3
        (poison) lib/poison.ex:41: Poison.encode!/2

元组不能通过毒物编码为JSON值。如果要在生成的JSON中使用
[{name:…,uid:…},{name:…,uid:…}]
,可以在查询中使用
map()
select
中的映射文字:

select: map(c, [:name, :uid])


元组不能通过毒物编码为JSON值。如果要在生成的JSON中使用
[{name:…,uid:…},{name:…,uid:…}]
,可以在查询中使用
map()
select
中的映射文字:

select: map(c, [:name, :uid])


添加到@Dogbert的答案中:您还可以根据手动返回的
exto
生成
map
来生成JSON对象:

companies =
  from(c in Company, select: {c.name, c.uid}, limit: 20)
  |> Repo.all()     # returning list of tuples
  |> Enum.into(%{}) # this

#⇒ %{"Loews Corporation" => 1000285930, "Foo" => 1, "Bar" => 2}

映射可能用
毒药编码为JSON,生成JS对象。

添加到@Dogbert的答案中:您也可以通过手动返回的
映射生成一个
JSON对象:

companies =
  from(c in Company, select: {c.name, c.uid}, limit: 20)
  |> Repo.all()     # returning list of tuples
  |> Enum.into(%{}) # this

#⇒ %{"Loews Corporation" => 1000285930, "Foo" => 1, "Bar" => 2}

映射可能使用
毒药编码为JSON,生成JS对象。

这是可行的,但是否知道错误:protocol Phoenix.HTML.Safe未实现%{name:在问题中的代码中,您正在发送一个JSON响应。您从何处调用此模板代码?因此,在同一个表单上,我正在调用autocomplete search,它在我对表单(如Enum.map(&{1.name,&1.uid})进行更改后工作,类:“表单控件”%>它起作用了,但对错误有什么想法:在问题中的代码中,%{name:没有实现协议Phoenix.HTML.Safe,您正在发送一个JSON响应。您从哪里调用此模板代码?因此,在同一个表单上,我调用autocomplete search,它在我更改表单(如Enum.map)后起作用(&{&1.name,&1.uid}),class:“表单控件”%>我认为这是您返回的元组的问题,您是否尝试过编码映射?类似于:
select:%%{name:c.name,uid:c.uid}
我认为这是您返回的元组的问题,您是否尝试过编码映射?类似于:
select:%{name:c.name,uid:c.uid}