2013-07-18 4 views
1

Я разбираюсь в json. Я хотел бы преобразовать его значения в другие типы. т.е.scala convert String to generic type

//json = JSON String 
val seq = net.liftweb.json.parse(json).\\("seq").values.toString.toLong 
val userName = net.liftweb.json.parse(json).\\("name").values.toString 
val intNum = net.liftweb.json.parse(json).\\("intId").values.toInt 

Я хотел бы, чтобы бросить его, используя универсальный метод более "Скала" путь, я пытался что-то вроде этого:

object Converter{ 
    def JSONCaster[T](json:String,s:String):T={ 
    net.liftweb.json.parse(json).\\(s).values.toString.asInstanceOf[T] 
    } 
} 

но получил ошибку литья:

Java. lang.ClassCastException: java.lang.String не может быть добавлено к java.lang.Long at scala.runtime.BoxesRunTime.unboxToLong (Неизвестно) Источник

+0

Существует запутанный массив конкурирующих решений (конкурирующие библиотеки, предлагающие решение) этой ... –

ответ

1

Посмотрите на marshalling/unmarshalling, как реализовано в спрее. Вам может не понадобиться повторно изобретать решение, и если вы это сделаете, вы можете взглянуть на their source, чтобы узнать, как они его реализовали.

Сортировка/разметка Spray аналогична сериализации сериализации объектов и работает не только с JSON, но и с некоторой дополнительной сложностью в реализации.

Вы также можете обойти ручную разборку JSON и попробуйте lift-json.

лифт-json ближе к JSON, хотя через extract он может работать аналогично маршеллеру/немаршалу Spray.

+0

JSON это всего лишь пример. Требуется сделать отличное кастинг для строкового типа в scalaish [email protected] – igx