2017-01-30 5 views
1

特定のjson値を取得して、特定のスキーマを使用してテーブルに格納するにはどうすればよいですか。実際の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 

を試してみました

例えばデータベースに保存するようにスキーマに必要なフィールドをマップする

+0

あなたは 'Payment.changeset'て(余分なフィールドを持つ)デコードされたJSONを渡すことができますか?余分なフィールドが削除され、すべてのキャストと検証が実行されます。 – Dogbert

+0

あなたの返事をありがとうございますので、すべてのjsonをチェンジセットに渡すことをお勧めします。しかし、チェンジセット内のjsonからデータを抽出するには、いくつかの例があります。共有したい場合は、それが役に立ちます。ありがとうございます @Dogbert –

+0

ちょっと役立つ答えを掲載しました。 – Dogbert

答えて

1

私はちょうど通過するだろう生はPayment.changeset/2に地図をデコードし、必要であれば、それは余分なフィールドを削除し、型キャストをやって処理させる:

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 –

関連する問題