%-6ren">
gpt4 book ai didi

list - 使用 Elixir 中的 map 访问列表中的嵌套元素

转载 作者:行者123 更新时间:2023-12-02 09:17:07 27 4
gpt4 key购买 nike

我是 elixir an phoenix 的新手,在访问测试中的嵌套元素时遇到了一些问题。我正在测试一个 Controller ,到目前为止得到了以下响应:

.[%{"attributes" => %{"first_name" => "Timmy 96", "last_name" => 
"Assistant"},
"id" => "bca58c53-7c6e-4281-9bc8-0c4616a30051",
"relationships" => %{"avatar" => %{"data" => %{"id" => "011300fd-ca98-42b4-
9561-f1cdc93d2d25",
"type" => "pictures"}}}, "type" => "users"}]

我正在使用 JSON-API 格式进行响应并使用用户数据获取属性:

user_attr = Enum.filter(includes, fn(item)->
item["relationships"]["avatar"] != nil
end)
IO.inspect user_attr
case Enum.fetch(user_attr ,0) do
{:ok, value} ->
assert value["attributes"]["first_name"] == user.first_name
assert value["attributes"]["last_name"] == user.last_name
{_} ->
assert false
end

我想缩短这部分,不想使用案例,但不知道如何在不使用案例中的值部分的情况下获取 user_attr 的值。

我还想用我之前插入的 id 断言关系的 id -> avatar -> data -> id,但不知道如何访问这个值。 id是我之前插入的图片的一部分,所以我想

assert XXX == picture.id

但是如何得到XXX呢?

希望有人能帮助我。去年只有 Java 和 C#,从来没有 Ruby,现在我以某种方式进入了 Elixir :/

谢谢。

最佳答案

您可以使用 get_in/2做这个。

iex()> list
[%{"attributes" => %{"first_name" => "Timmy 96", "last_name" =>
"Assistant"},
"id" => "bca58c53-7c6e-4281-9bc8-0c4616a30051",
"relationships" => %{"avatar" => %{"data" => %{"id" => "011300fd-ca98-
42b4-\n9561-f1cdc93d2d25",
"type" => "pictures"}}}, "type" => "users"}]

iex()> [map] = list
[%{"attributes" => %{"first_name" => "Timmy 96", "last_name" =>
"Assistant"},
"id" => "bca58c53-7c6e-4281-9bc8-0c4616a30051",
"relationships" => %{"avatar" => %{"data" => %{"id" => "011300fd-ca98-
42b4-\n9561-f1cdc93d2d25",
"type" => "pictures"}}}, "type" => "users"}]


iex()> get_in map, ["attributes", "first_name"]
"Timmy 96"
iex()> get_in map, ["attributes", "last_name"]
"Assistant"
iex()> get_in map, ["relationships", "avatar", "data", "id"]
"011300fd-ca98-42b4-\n9561-f1cdc93d2d25"

关于list - 使用 Elixir 中的 map 访问列表中的嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45850464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com