0

Yesod REST サービスの統合テストで、呼び出された API が返されます。

{
  "userId": "xxx"
}

ここxxxで、MongoDB ObjectID (12 バイトの 16 進数でエンコードされた文字列) です。

aesonを使用して、返された JSON が実際にこの形式であることを確認したいと思います。

JSONを正規の形式に変換する方法はありますか?

{
   "userId": "-1"
}

フィールドの値がuserId指定された正規表現と一致するか?

assertEquals次に、応答 JSON (実際) を期待値に一致させるために使用できます。

Scala Lift JSON ライブラリでは、次のようなことができます。

val actual = json.transform {
case JField("userId", value)
  if """[0-9a-f]{24}""".r.findFirstIn(value).isDefined =>
  JField("userId", "-1")
}

aesonに似たようなものはありますか?

4

1 に答える 1

2

代数データ型の一般的な変換については、uniplateパッケージをご覧ください。

たとえば、次の式タイプがあるとします。

data Expr = Val Int
          | Add Expr Expr
          | Sub Expr Expr
          | Div Expr Expr
          | Mul Expr Expr
          | Neg Expr
          deriving (Show, Eq)

この関数を使用して、サブツリーNeg (Val x)をどこにでも変換できます。Val (negate x)

import Data.Generics.Uniplate

optimise :: Expr -> Expr
optimise = transform $ \x -> case x of
    Neg (Val i) -> Val (negate i)
    x -> x
于 2014-08-10T15:53:44.000 に答える