我想解析一个JSON对象并使用给定的name
和创建一个JSONEventargs
我正在使用Aeson,现在我不得不转换"args":[{"a": "b"}]
为a [(String, String)]
.
提前致谢!
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import Data.Aeson
data JSONEvent = JSONEvent [(String, String)] (Maybe String) deriving Show
instance FromJSON JSONEvent where
parseJSON j = do
o <- parseJSON j
name <- o .:? "name"
args <- o .:? "args" .!= []
return $ JSONEvent args name
let decodedEvent = decode "{\"name\":\"edwald\",\"args\":[{\"a\": \"b\"}]}" :: Maybe JSONEvent
Run Code Online (Sandbox Code Playgroud) 我正在和凤凰+ Ecto一起玩,我偶然发现了一些对我来说不太惯用的东西.
我有一个代表一个表格Invitation
.在创建邀请时,我们还需要创建一个User
,显然我希望两者都在事务中发生,因此我保持数据一致性.以我的形式,我要求name
和email
.
因为我希望Invitation
我的视图中的变更集正确地表示错误,所以我最终得到了这个代码...但看起来不太好.
你知道在Phoenix + Ecto有更好的方法吗?
def create(params) do
Repo.transaction(fn ->
case Repo.insert(User.email_changeset(%User{}, params)) do
{:ok, user} ->
changeset = Invitation.changeset(%Invitation{}, params)
case Repo.insert(Ecto.Changeset.change(changeset, user_id: user.id)) do
{:ok, user} ->
user
{:error, changeset} ->
Repo.rollback(changeset)
end
{:error, _changeset} ->
Repo.rollback(%{Ecto.Changeset.add_error(changeset, :email, "Wrong email") | action: :insert})
end
end)
end
Run Code Online (Sandbox Code Playgroud)