how to represent nested JSON object in a case class using Json4s?

梦想的初衷 提交于 2020-01-06 01:27:12

问题


Given an example JSON object with a nested object who's properties are unkown:

      { "Key":"01234",
          "eventProperties":{
             "unknownProperty1":"value",
             "unknownProperty2":"value",
             "unknownProperty3":"value"
          },
       }

I have tried to use json4s' extract function with the following case class (In Scala):

case class nestedClass(Key:String, eventProperties:Map[(String,Any)])

Which results in the following error:

org.json4s.package$MappingException: Can't find constructor for nestedClass

Is it possible to do this without defining every possible property of eventProperties?

Update: there was a bug in json4s 3.2.10 causing this issue - updating to 3.2.11 and extracting to Map[String,Any] works fine.


回答1:


I'm not sure what you are doing to get the exception you have posted, but the following works (note a Map instead of List):

import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.json4s.DefaultFormats

val json = parse("""
{ "key":"01234",
  "eventProperties":{
    "unknownProperty1":"value",
    "unknownProperty2":"value",
    "unknownProperty3":"value"
  }
}
""")

case class NestedClass(key:String, eventProperties:Map[String,Any])

implicit val formats = DefaultFormats

json.extract[NestedClass]



回答2:


In Order to get eventProperties as List[(String, Any)], your json should be,

         """ {
               "key": "01234",
               "eventProperties": [
                   {"unknownProperty1": "value"},
                   {"unknownProperty2": "value"},
                   {"unknownProperty3": "value"}
               ]
           }"""

Otherwise, you can use Map instead of List as case class nestedClass1(key:String, eventProperties:Map[String,Any]) and then convert to nestedClass as nestedClass( n1.key, n1.eventProperties.toList)



来源:https://stackoverflow.com/questions/32336735/how-to-represent-nested-json-object-in-a-case-class-using-json4s

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!