2013-12-17 63 views
0

我使用jsonerl來解碼我的應用程序中的請求正文。得到的元組看起來像這樣:Erlang:如何找到元組內的子元組

{ 
    {<<"message">>,<<"Hello World">>},    
    {<<"users">>, [ 
     { 
      {<<"first_name">>,<<"Jules">>}, 
      {<<"last_name">>,<<"Winfield">>}, 
      {<<"id">>,1} 
     }, 
     { 
      {<<"first_name">>,<<"Vincent">>}, 
      {<<"last_name">>,<<"Vega">>}, 
      {<<"id">>,2} 
     } 
    ]}, 
    {<<"activities">>, [ 
     { 
      {<<"type">>,<<"fetching bag">>}, 
      {<<"user_id">>,1} 
     }, 
     { 
      {<<"type">>,<<"discussing metrical system">>}, 
      {<<"user_id">>,2} 
     } 
    ]}, 
} 

當然,這些子元組的順序是未知的。

我想將用戶列表交給一個函數來創建一個記錄列表。我怎樣才能訪問這些元組內的這個列表。

在此先感謝

回答

2

試試這個:

{_, ListOfUsers} = lists:keyfind(<<"users">>, 1, tuple_to_list(YourListOfUsers)). 
+1

這工作,非常感謝 – Stoecki

1

你的意思是像這樣的模式匹配?

{ _ , { _ , ListOfUsers } } = YourListOfUsers. 

但是,如果你的意思是:

當然的subtupels的順序是未知的。

用戶元組是否有時首先出現,然後以前的代碼片段不會工作。你應該在你的結果元組中強制執行某種結構。

+0

在上面的例子中它的工作原理,但在我的情況下,用戶的三元組是不是唯一的背後列表。我將編輯我關於這個問題。 – Stoecki

+0

@Stoecki所以有時用戶元組是在活動元組之後? – Chiron

+0

是的,這取決於不同應用程序的序列化。所以我們不能假設,那訂單是固定的 – Stoecki