2017-01-30 41 views
1

如何獲取特定的json值並將其存儲在我的表中,並使用某些特定模式。獲取json值並將其存儲在我的表中,並使用一些特定模式

如我試圖

def save_to_payment(conn,result) do 
    Poison.decode!(result, as: %Payments.payment{}) 
end 

這種模式,

schema "payment" do 
    field :payment_id, :string 
    field :state, :string 
    field :amount, :decimal 
    timestamps() 
end 

但是實際的JSON有很多領域,我只是需要只有少數了出來..

我需要將我想要的字段映射到模式,以便將它們保存在數據庫中

+0

您可以通過解碼JSON(額外字段)?這將刪除額外的字段,並運行所有的強制轉換和驗證。 – Dogbert

+0

感謝您的回覆,因此您建議將所有json傳遞給變更集。但是爲了從變更集中提取json的數據,我可以舉一些例子,如果你想分享,這將有所幫助。謝謝 @Dogbert –

+0

剛剛發佈了一個應該幫助的答案。 – Dogbert

回答

1

我剛剛通過原料解碼映射到Payment.changeset/2讓它進行處理,除去多餘的領域,如果需要做類型轉換:通過`Payment.changeset`

json = "{\"state\":\"CA\",\"payment_id\":1,\"go\":\"here\",\"extra\":\"fields\",\"amount\":123}" 
decoded = Poison.decode!(json) 
changeset = Payment.changeset(%Payment{}, decoded) 
# You can now `Repo.insert!(changeset)` or use it in forms etc. 
+0

謝謝,這是我得到的, **(引發ArgumentError)參數錯誤 :erlang.iolist_to_binary {% @Dogbert –

+0

@ZubairNabi你確定你傳遞一個字符串,''Poison.decode!?你可以將代碼粘貼到某處(在你的問題或gist.github.com中)? – Dogbert

+0

謝謝你,我明白了。我通過Json解碼,這已經是一張地圖。不需要解碼。謝謝 @Dogbert –

相關問題