小编mas*_*lum的帖子

使用Aeson解析嵌套的对象数组

我想解析一个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)

json haskell aeson

5
推荐指数
1
解决办法
2252
查看次数

如何使表格和交易在凤凰+ ecto中发挥出色?

我正在和凤凰+ Ecto一起玩,我偶然发现了一些对我来说不太惯用的东西.

我有一个代表一个表格Invitation.在创建邀请时,我们还需要创建一个User,显然我希望两者都在事务中发生,因此我保持数据一致性.以我的形式,我要求nameemail.

因为我希望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)

elixir ecto phoenix-framework

2
推荐指数
1
解决办法
1448
查看次数

标签 统计

aeson ×1

ecto ×1

elixir ×1

haskell ×1

json ×1

phoenix-framework ×1