3

次のデータ構造があります。

val jsonStr = """
     {
      "data1": {
        "field1": "data1",
        "field2": 1.0,
        "field3": true
      },
      "data211": {
        "field1": "data211",
        "field2": 4343.0,
        "field3": false
      },
      "data344": {
        "field1": "data344",
        "field2": 436778.51,
        "field3": true
      },
      "data41": {
        "field1": "data41",
        "field2": 14348.0,
        "field3": true
      }
    }
  """

抽出したい。これが私が運なしでやっていることです:

#1. 
case class Fields(field1: String, field2: Double, field3: Boolean)
json.extract[Map[String, Map[Fields, String]]]
//org.json4s.package$MappingException: Do not know how to convert JBool(true) 
//into class       java.lang.String

#2.
json.extract[Map[String, Map[String, Fields]]
//java.lang.InternalError: Malformed class name


#3.
json.extract[Map[String, Map[String, Any]]]
//org.json4s.package$MappingException: No information known about type

#4.
json.extract[Map[String, Map[String, String]]]
//org.json4s.package$MappingException: Do not know 
//how to convert JBool(true) into class java.lang.String

どうすればいいですか?

PS - 実際には、それはhttps://github.com/json4s/json4sliftですが、json 抽出に関して同じ API を持っているため、実際には問題ではありません。

UPDATE : おそらく変換メソッドを使用する必要があります。どうやって使うの?

val json = parse(jsonStr) transform { 
  case //.... what should be here to catch JBool -- "field3"?
}

UPDATE2 :

#5
json.extract[Map[String, Map[String, JValue]]]
// Works! but it's not what I'm looking for, I need to use a pure Java/Scala type
4

1 に答える 1