package com.besterdesigns.mandrill
import net.liftweb.json._import net.liftweb.json.JsonAST._
object App {
def main(args: Array[String]) { implicit val formats = DefaultFormats // Serialization.formats(FullTypeHints(List(classOf[Holder])))// Serialization.formats(FullTypeHints(List(classOf[AnyRef])))
case class Holder(values: Map[String, Any]) case class Person(name: String, age: Int) case class Dog(owner: Person, name: String)
val vals = Map("p" -> Person("joe doe", 32), "dog" -> Dog(Person("ann", 12), "pluto")) val myjson = Extraction.decompose(Holder(vals))
println("myson " + myjson) val h = myjson.extract[Holder] }}
Exception in thread "main" net.liftweb.json.MappingException: unknown error at net.liftweb.json.Extraction$.extract(Extraction.scala:46) at net.liftweb.json.JsonAST$JValue.extract(JsonAST.scala:300) at com.besterdesigns.mandrill.App$.main(App.scala:73) at com.besterdesigns.mandrill.App.main(App.scala)Caused by: java.lang.NullPointerException at scala.tools.scalap.scalax.rules.scalasig.ByteCode$.forClass(ClassFileParser.scala:16) at scala.tools.scalap.scalax.rules.scalasig.ScalaSigParser$.parse(ScalaSig.scala:49) at net.liftweb.json.ScalaSigReader$.net$liftweb$json$ScalaSigReader$$findScalaSig(ScalaSig.scala:118) at net.liftweb.json.ScalaSigReader$$anonfun$net$liftweb$json$ScalaSigReader$$findScalaSig$1.apply(ScalaSig.scala:118) at net.liftweb.json.ScalaSigReader$$anonfun$net$liftweb$json$ScalaSigReader$$findScalaSig$1.apply(ScalaSig.scala:118) at scala.Option.orElse(Option.scala:257) at net.liftweb.json.ScalaSigReader$.net$liftweb$json$ScalaSigReader$$findScalaSig(ScalaSig.scala:118) at net.liftweb.json.ScalaSigReader$.findClass(ScalaSig.scala:40) at net.liftweb.json.ScalaSigReader$.readConstructor(ScalaSig.scala:24) at net.liftweb.json.Meta$Reflection$.term$1(Meta.scala:277) at net.liftweb.json.Meta$Reflection$.typeParameters(Meta.scala:295) at net.liftweb.json.Meta$.mkContainer$1(Meta.scala:108) at net.liftweb.json.Meta$.fieldMapping$1(Meta.scala:137) at net.liftweb.json.Meta$.net$liftweb$json$Meta$$toArg$1(Meta.scala:155) at net.liftweb.json.Meta$$anonfun$net$liftweb$json$Meta$$constructors$1$1$$anonfun$apply$1.apply(Meta.scala:99) at net.liftweb.json.Meta$$anonfun$net$liftweb$json$Meta$$constructors$1$1$$anonfun$apply$1.apply(Meta.scala:98) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) at scala.collection.immutable.List.foreach(List.scala:318) at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) at scala.collection.AbstractTraversable.map(Traversable.scala:105) at net.liftweb.json.Meta$$anonfun$net$liftweb$json$Meta$$constructors$1$1.apply(Meta.scala:98) at net.liftweb.json.Meta$$anonfun$net$liftweb$json$Meta$$constructors$1$1.apply(Meta.scala:97) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) at scala.collection.immutable.List.foreach(List.scala:318) at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) at scala.collection.AbstractTraversable.map(Traversable.scala:105) at net.liftweb.json.Meta$.net$liftweb$json$Meta$$constructors$1(Meta.scala:97) at net.liftweb.json.Meta$$anonfun$mappingOf$1.apply(Meta.scala:169) at net.liftweb.json.Meta$$anonfun$mappingOf$1.apply(Meta.scala:161) at net.liftweb.json.Meta$Memo.memoize(Meta.scala:199) at net.liftweb.json.Meta$.mappingOf(Meta.scala:161) at net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$mkMapping$1(Extraction.scala:194) at net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$extract0(Extraction.scala:199) at net.liftweb.json.Extraction$.extract(Extraction.scala:43) ... 3 more
--
--
Lift, the simply functional web framework: http://liftweb.net
Code: http://github.com/lift
Discussion: http://groups.google.com/group/liftweb
Stuck? Help us help you: https://www.assembla.com/wiki/show/liftweb/Posting_example_code
---
You received this message because you are subscribed to the Google Groups "Lift" group.
To unsubscribe from this group and stop receiving emails from it, send an email to liftweb+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
You received this message because you are subscribed to a topic in the Google Groups "Lift" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/liftweb/6jT2LZHvS3s/unsubscribe.
To unsubscribe from this group and all its topics, send an email to liftweb+u...@googlegroups.com.
{"name":"atest","data":{"rcpt":"user1","values":{"akey1":"astring","akey2":123}}}
where the 'values' tuple has format of (String, Int or String) and there is no predefined order.
package com.besterdesigns.json
import net.liftweb.json.{DefaultFormats, ShortTypeHints, parse}
object App { case class RecipientData(val rcpt: String, val values: Map[String, Any]) case class Root(name: String, data: RecipientData)
def main(args: Array[String]) {
implicit val formats = DefaultFormats.withHints(ShortTypeHints(classOf[Root]::classOf[RecipientData]::Nil))
//Example of incoming json string - format is fixed val jsonStr = """{"name":"atest","data":{"rcpt":"user1","values":{"akey1":"astring","akey2":123}}}""" val json = parse(jsonStr) println("incoming json string -> "+jsonStr) println("parsed json object -> "+json) val obj = json.extract[Root] println("Root obj -> " + obj.data.values) }}