Десериализация JSON с использованием отражения
Привет, я пытаюсь извлечь JSON, используя отражение
import net.liftweb.json._
case class Bike(make: String, price: Int) {
def this(price: Int) = this("Trek", price)
}
val cls = Class.forName("Bike")
val manifest = Manifest.classType(cls)
val parsedData =net.liftweb.json.JsonParser.parse(json)
JsonParser.parse(""" {"price":350} """).extract[manifest]
однако я получаю эту ошибку:
not found: type manifest
JsonParser.parse(""" {"price":350} """).extract[manifest]
^
хотя манифест от типа Манифест
2 ответа
Решение
Вы можете извлечь прямо в case class
val json = "the json";
val bike = parse(json).extract[Bike];
Разбор JSON выполняется посредством рефлексии.
Если класс является конструкцией времени выполнения, создайте экземпляр TypeInfo и передайте его методу извлечения.
Существует вариация extract()
метод, который может работать для вас, если вы предоставите ему TypeInfo
пример.
Смотрите здесь: https://github.com/lift/lift/blob/master/framework/lift-base/lift-json/src/main/scala/net/liftweb/json/Extraction.scala