6

Phoenix でデフォルトの json ツールを使用していますが、何らかの理由で日付 (フィールド タイプ:date) を返すことができません。私はこのようなものを得る:

unable to encode value: {2015, 3, 24}

タイプdateのデータベース内のフィールドでpostgresデータベースを使用しています。何か不足していますか?毒でエンコードする前に、日付を解析する関数を作成する必要がありますか?

4

3 に答える 3

5

あなたの「日付オブジェクト」は単なるElixirタプルです。Posion は Elixir タプルをエンコードする方法を知りません:

iex(1)> Poison.encode({2015, 3, 24}) 
{:error, {:invalid, {2015, 3, 24}}}

最初に日付を文字列にフォーマットすると、Posion は問題なく JSON にエンコードします。

iex(2)> Poison.encode(:io_lib.format("~4..0B-~2..0B-~2..0B", [2015, 3, 24]) |> List.flatten |> to_string)
{:ok, "\"2015-03-24\""}

お役に立てれば。

于 2015-03-26T14:51:39.910 に答える
2

これは、次の Phoenix リリース (v0.11) で改善される予定です。

  1. 新しい Phoenix バージョンには、 phoenix_ectoプロジェクト用Ecto.DateTimeおよびEcto.Date経由のエンコーダが自動的に含まれます。だから、それはうまくいくはずです™。

  2. とは言っても、タプルではなく構造体を操作するので、 and の代わりにEcto.DateTime、and Ecto.Datefriendsを使用することをお勧めします。:datetime:time

于 2015-03-27T13:54:06.630 に答える