2017-10-04 12 views
1

することができキルケからJSONオブジェクトを作成します。その後、私ならば、しかし値がStringまたはI値は以下のように、文字列または一覧できる場所キルケでJSONオブジェクトを作成したいリスト

val param = Map[String, Map[String, Object]](
    "param_a" -> Map[String, Object](
     "param_a1" -> "str_value", 
     "param_a2" -> List(
     Map[String, String](
      "param_a2.1" -> "value_2.1", 
      "param_a2.2" -> "value_2.2") 
    ) 
    ), 

それはあなただけSCOPにEncoderの暗黙のインスタンスを提供する必要が

​​

答えて

0

で失敗しました

param.asJson 

を行いますeはObjectです。これで試してみてください:

implicit val objEncoder: Encoder[Object] = Encoder.instance { 
    case x: String => x.asJson 
    case xs: List[Map[String, String]] => xs.asJson 
} 

私はObjectの使用を避け、代わりに2の可能な例をラップするADTを提供するしかし、それはStringList[Map[String, String]]ですが、それはあなた次第です。さらに、Scalaの世界ではObjectAnyRefとして広く知られているので、Objectを使いたいのであれば、AnyRefと呼ぶことをお勧めします。

P .: Scalaバージョン2.12.0を使用している場合、SAM conversion in overloading resolutionのおかげでEncoder.instanceと入力しなくても済みます。だから、コードになるでしょう:

implicit val objEncoder: Encoder[Object] = { 
    case x: String => x.asJson 
    case xs: List[Map[String, String]] => xs.asJson 
} 
+0

おかげで、このAPIの新しいユーザーおよび取得いくつかの簡単な質問 – carfield

+0

問題ありませんを使用して、あなた歓迎します。 – lambdista

1

[OK]を、クイックフィックスは、地図[文字列、JSON]

val param = Map[String, Map[String, Json]](
"param_a" -> Map[String, Json](
    "param_a1" -> "str_value".asJson, 
    "param_a2" -> List(
    Map[String, String](
     "param_a2.1" -> "value_2.1", 
     "param_a2.2" -> "value_2.2") 
).asJson 
), 
+0

これは、circeでJSONの "マニュアル"をどのように行うかを理解するのに役立ちました。 – akauppi

+0

聞いてよかったです – carfield

関連する問題