Извлечение json в Scala

У меня есть следующая структура данных:

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

Как мне это сделать тогда?

P.S. -- на самом деле это https://github.com/json4s/json4s, но это не имеет большого значения так как lift имеет тот же API в отношении извлечения json.

ОБНОВЛЕНИЕ: возможно, потребуется использовать метод преобразования. Как я буду его использовать?

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

ОБНОВЛЕНИЕ 2:

#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

person Alan Coromano    schedule 07.06.2013    source источник
comment
json.extract[Map[String, Fields]] кажется, работает для меня. Двойная структура Map этого не делает. Что хотела захватить вторая карта?   -  person jcern    schedule 07.06.2013
comment
@jcern не работает, я только что проверил.   -  person Alan Coromano    schedule 07.06.2013
comment
Хм, тогда, кажется, есть разница между парсером лифта и json4s, потому что версия лифта, кажется, работает для меня (или я сделал что-то дополнительное, чего я не понял). Возможно, это как-то связано с форматами, которые он использует для извлечения.   -  person jcern    schedule 07.06.2013
comment
@jcern на что это похоже? ты пытаешься угадать?   -  person Alan Coromano    schedule 07.06.2013
comment
Что я имею в виду, кажется, так это то, что я не уверен, что это то, что вы искали, отсюда и утверждение о том, что нужно сделать что-то еще (и мой вопрос о том, что двойная Карта искала для захвата). Во всяком случае, я опубликовал вывод REPL для вас. Он использует парсер Lift JSON — надеюсь, это поможет.   -  person jcern    schedule 07.06.2013
comment
Просто добавлю: для тех, кто пришел сюда за значениями json, такими как myjson = [{ field1: data1, field2: 1.0, field3: true }, { field1: data2, field2: 2.0, field3: false }], используйте parse(myjson ).extract[List[Map[String,Any]]], перейдите по этой ссылке, которая в основном преобразует объект карты в объект класса case stackoverflow.com/questions/20684572/, а затем используйте toString для преобразования в строку и toString.toBoolean для преобразования в логическое значение для соответствующих полей.   -  person sdinesh94    schedule 22.08.2017