[Lift] Re: json extraction problem

2009-10-01 Thread Lincoln
Cool, thanks Joni.  I'll give it a try.

On Thu, Oct 1, 2009 at 2:36 AM, Joni Freeman  wrote:

>
> Hi,
>
> I pasted this to scala console and it worked. I am pretty sure that
> the problem is that your case classes are inner classes. Inner classes
> get one extra implicit constructor parameter, a reference to the outer
> class (same way as in Java). You need to move those case classes away
> from enclosing class (to an object or package etc.).
>
> The error message is very bad in this case. I will fix it.
>
> Cheers Joni
>
> On Oct 1, 7:49 am, Lincoln  wrote:
> > Hi, I've been playing around with lift-json and I keep running into basic
> > problems.  I'm hoping someone can point out my mistake.
> > I'm using "net.liftweb" % "lift-json" % "1.1-M5"
> >
> > Here's the code I'm trying to run:
> >
> > implicit val formats = net.liftweb.json.DefaultFormats
> > case class Name(first: String, last: String)
> > case class User(name: Name, email: String)
> > import net.liftweb.json.JsonParser._
> > val u = {
> > import JsonDSL._
> > ("name" ->
> > ("first" -> "Lincoln") ~
> > ("last" -> "Hochberg")
> > ) ~
> > ("email" -> "linxbet...@gmail.com")}
> >
> > val json = JsonDSL.pretty(JsonAST.render(u))
> > val jsonAST = JsonParser.parse(json)
> > val user = jsonAST.extract[User]
> >
> > This blows up with the following exception:
> >
> > net.liftweb.json.MappingException: Parsed JSON values do not match with
> > class constructor
> > args=
> > arg types=
> > constructor=public
> > pkg.TestSpec$$anonfun$1$$anonfun$apply$1(pkg.TestSpec$$anonfun$1)
> > at
> >
> net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$fail(Extraction.scala:151)
> > at net.liftweb.json.Extraction$.newInstance$1(Extraction.scala:72)
> > at net.liftweb.json.Extraction$.build$1(Extraction.scala:84)
> > at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84)
> > at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84)
> > at scala.List.flatMap(List.scala:1132)
> > at net.liftweb.json.Extraction$.build$1(Extraction.scala:84)
> > at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84)
> > at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84)
> > at scala.List.flatMap(List.scala:1132)
> > at net.liftweb.json.Extraction$.build$1(Extraction.scala:84)
> > at net.liftweb.json.Extraction$.extract0(Extraction.scala:109)
> > at net.liftweb.json.Extraction$.extract(Extraction.scala:60)
> > at net.liftweb.json.JsonAST$JValue.extract(Json.scala:109)
> > at
> >
> com.hotpotato.core.ops.TestSpec$$anonfun$1$$anonfun$apply$1.apply(TestSpec.scala:48)
> > at
> >
> com.hotpotato.core.ops.TestSpec$$anonfun$1$$anonfun$apply$1.apply(TestSpec.scala:14)
> > at
> >
> org.specs.specification.ExampleExecution$$anonfun$3$$anonfun$apply$1.apply(Example.scala:207)
> > at org.specs.specification.Example.execute(Example.scala:121)
> > at
> >
> org.specs.specification.ExampleLifeCycle$class.executeTest(ExampleLifeCycle.scala:20)
> > at org.specs.Specification.executeTest(Specification.scala:28)
> > at org.specs.specification.Sus.executeTest(Sus.scala:147)
> > at
> >
> org.specs.specification.ExampleExecution$$anonfun$3.apply(Example.scala:207)
> > at
> >
> org.specs.specification.ExampleExecution$$anonfun$3.apply(Example.scala:194)
> > at
> >
> org.specs.specification.ExampleExecution$$anonfun$2.apply(Example.scala:185)
> > at org.specs.specification.ExampleExecution.execute(Example.scala:227)
> > at org.specs.specification.Example.execute(Example.scala:117)
> > at org.specs.specification.Example.errors(Example.scala:143)
> > at org.specs.specification.Sus$$anonfun$successes$1.apply(Sus.scala:122)
> > at org.specs.specification.Sus$$anonfun$successes$1.apply(Sus.scala:122)
> > at scala.List.filter(List.scala:859)
> > at org.specs.specification.Sus.successes(Sus.scala:122)
> > at
> >
> org.specs.Specification$$anonfun$successes$1.apply(Specification.scala:84)
> > at
> >
> org.specs.Specification$$anonfun$successes$1.apply(Specification.scala:84)
> > at scala.List.flatMap(List.scala:1132)
> > at org.specs.Specification.successes(Specification.scala:84)
> > at
> >
> sbt.impl.SpecsRunner.sbt$impl$SpecsRunner$$reportSpecification(TestFrameworkImpl.scala:140)
> > at sbt.impl.SpecsRunner.runTest(TestFrameworkImpl.scala:123)
> > at sbt.BasicTestRunner.run(TestFramework.scala:38)
> > at
> >
> sbt.TestFramework$$anonfun$7$$anonfun$apply$8.runTest$1(TestFramework.scala:136)
> > at
> >
> sbt.TestFramework$$anonfun$7$$anonfun$apply$8$$anonfun$apply$9.apply(TestFramework.scala:147)
> > at
> >
> sbt.TestFramework$$anonfun$7$$anonfun$apply$8$$anonfun$apply$9.apply(TestFramework.scala:147)
> > at sbt.NamedTestTask.run(TestFramework.scala:57)
> > at
> >
> sbt.ScalaProject$$anonfun$sbt$ScalaProject$$toTask$1.apply(ScalaProject.scala:167)
> > at
> >
> sbt.ScalaProject$$anonfun$sbt$ScalaProject$$toTask$1.apply(ScalaProject.scala:167)
> > at sbt.TaskManager$Task.invoke(TaskManager.scala:62)
> > at sbt.impl.RunTask.runTask(RunTask.scala:78)

[Lift] Re: json extraction problem

2009-09-30 Thread Joni Freeman

Hi,

I pasted this to scala console and it worked. I am pretty sure that
the problem is that your case classes are inner classes. Inner classes
get one extra implicit constructor parameter, a reference to the outer
class (same way as in Java). You need to move those case classes away
from enclosing class (to an object or package etc.).

The error message is very bad in this case. I will fix it.

Cheers Joni

On Oct 1, 7:49 am, Lincoln  wrote:
> Hi, I've been playing around with lift-json and I keep running into basic
> problems.  I'm hoping someone can point out my mistake.
> I'm using "net.liftweb" % "lift-json" % "1.1-M5"
>
> Here's the code I'm trying to run:
>
> implicit val formats = net.liftweb.json.DefaultFormats
> case class Name(first: String, last: String)
> case class User(name: Name, email: String)
> import net.liftweb.json.JsonParser._
> val u = {
> import JsonDSL._
> ("name" ->
> ("first" -> "Lincoln") ~
> ("last" -> "Hochberg")
> ) ~
> ("email" -> "linxbet...@gmail.com")}
>
> val json = JsonDSL.pretty(JsonAST.render(u))
> val jsonAST = JsonParser.parse(json)
> val user = jsonAST.extract[User]
>
> This blows up with the following exception:
>
> net.liftweb.json.MappingException: Parsed JSON values do not match with
> class constructor
> args=
> arg types=
> constructor=public
> pkg.TestSpec$$anonfun$1$$anonfun$apply$1(pkg.TestSpec$$anonfun$1)
> at
> net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$fail(Extraction.scala:151)
> at net.liftweb.json.Extraction$.newInstance$1(Extraction.scala:72)
> at net.liftweb.json.Extraction$.build$1(Extraction.scala:84)
> at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84)
> at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84)
>         at scala.List.flatMap(List.scala:1132)
> at net.liftweb.json.Extraction$.build$1(Extraction.scala:84)
> at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84)
> at net.liftweb.json.Extraction$$anonfun$1.apply(Extraction.scala:84)
> at scala.List.flatMap(List.scala:1132)
> at net.liftweb.json.Extraction$.build$1(Extraction.scala:84)
> at net.liftweb.json.Extraction$.extract0(Extraction.scala:109)
> at net.liftweb.json.Extraction$.extract(Extraction.scala:60)
> at net.liftweb.json.JsonAST$JValue.extract(Json.scala:109)
> at
> com.hotpotato.core.ops.TestSpec$$anonfun$1$$anonfun$apply$1.apply(TestSpec.scala:48)
> at
> com.hotpotato.core.ops.TestSpec$$anonfun$1$$anonfun$apply$1.apply(TestSpec.scala:14)
> at
> org.specs.specification.ExampleExecution$$anonfun$3$$anonfun$apply$1.apply(Example.scala:207)
> at org.specs.specification.Example.execute(Example.scala:121)
> at
> org.specs.specification.ExampleLifeCycle$class.executeTest(ExampleLifeCycle.scala:20)
> at org.specs.Specification.executeTest(Specification.scala:28)
> at org.specs.specification.Sus.executeTest(Sus.scala:147)
> at
> org.specs.specification.ExampleExecution$$anonfun$3.apply(Example.scala:207)
> at
> org.specs.specification.ExampleExecution$$anonfun$3.apply(Example.scala:194)
> at
> org.specs.specification.ExampleExecution$$anonfun$2.apply(Example.scala:185)
> at org.specs.specification.ExampleExecution.execute(Example.scala:227)
> at org.specs.specification.Example.execute(Example.scala:117)
> at org.specs.specification.Example.errors(Example.scala:143)
> at org.specs.specification.Sus$$anonfun$successes$1.apply(Sus.scala:122)
> at org.specs.specification.Sus$$anonfun$successes$1.apply(Sus.scala:122)
> at scala.List.filter(List.scala:859)
> at org.specs.specification.Sus.successes(Sus.scala:122)
> at
> org.specs.Specification$$anonfun$successes$1.apply(Specification.scala:84)
> at
> org.specs.Specification$$anonfun$successes$1.apply(Specification.scala:84)
> at scala.List.flatMap(List.scala:1132)
> at org.specs.Specification.successes(Specification.scala:84)
> at
> sbt.impl.SpecsRunner.sbt$impl$SpecsRunner$$reportSpecification(TestFrameworkImpl.scala:140)
> at sbt.impl.SpecsRunner.runTest(TestFrameworkImpl.scala:123)
> at sbt.BasicTestRunner.run(TestFramework.scala:38)
> at
> sbt.TestFramework$$anonfun$7$$anonfun$apply$8.runTest$1(TestFramework.scala:136)
> at
> sbt.TestFramework$$anonfun$7$$anonfun$apply$8$$anonfun$apply$9.apply(TestFramework.scala:147)
> at
> sbt.TestFramework$$anonfun$7$$anonfun$apply$8$$anonfun$apply$9.apply(TestFramework.scala:147)
> at sbt.NamedTestTask.run(TestFramework.scala:57)
> at
> sbt.ScalaProject$$anonfun$sbt$ScalaProject$$toTask$1.apply(ScalaProject.scala:167)
> at
> sbt.ScalaProject$$anonfun$sbt$ScalaProject$$toTask$1.apply(ScalaProject.scala:167)
> at sbt.TaskManager$Task.invoke(TaskManager.scala:62)
> at sbt.impl.RunTask.runTask(RunTask.scala:78)
> at sbt.impl.RunTask.sbt$impl$RunTask$$runIfNotRoot(RunTask.scala:63)
> at sbt.impl.RunTask$$anonfun$runTasksExceptRoot$3.apply(RunTask.scala:49)
> at sbt.impl.RunTask$$anonfun$runTasksExceptRoot$3.apply(RunTask.scala:49)
> at sbt.Distributor$Run$Worker$$anonfun$2.apply(ParallelRunner.scala:130)
> at sbt.Distributor$Run$Worker$$an