Hi,
That's almost correct. I did following changes after looking into JSON
content.
1. 'notice' and 'header' are JSON arrays just like 'data'. Therefore:
case class Observation(notice: List[Notice], header: List[Header],
data: List[Data])
2. There's optional data in JSON (some datapoints are nulls and Scala
Int or Double can't take null values). This can be fixed by extracting
into Option.
3. The extracted Observation is in JSON field 'observations'.
Therefore:
(json \ "observations").extract[Observation]
Your error stack trace suggests that you have an old version of lift-
json. Please upgrade to M8, there was a critical bug in case class
extraction in older versions.
Full example which works for me:
implicit val formats = net.liftweb.json.DefaultFormats
case class Notice(copyright: String, copyright_url: String,
disclaimer_url: String)
case class Header(refresh_message: String, ID: String, main_ID:
String, name: String, state_time_zone: String, time_zone: String,
product_name: String, state: String)
case class Data(sort_order: Int, wmo: Int, history_product: String,
local_date_time: String,
local_date_time_full: String, air_temp: Option
[Double], dewpt: Option[Double], apparent_t: Option[Double],
rel_hum: Option[Int], delta_t: Option[Double],
wind_dir: String, wind_spd_kt: Option[Double], gust_kt: Option
[Double],
wind_spd_kmh: Option[Double], press: Option[Double],
rain_trace: String)
case class Observation(notice: List[Notice], header: List[Header],
data: List[Data])
(json \ "observations").extract[Observation]
Cheers Joni
On 3 tammi, 09:17, Randinn <[email protected]> wrote:
> I'm having a bit of trouble with Lift Json parcing, I know I'm not
> doing it correctly but looking at the examples I cannot figure out
> what, anyway, here is the code in question..... If someone could point
> me in the right direction that would be great, thanks in advance.
>
> class HelloWorld {
> def howdy = <span>Welcome to hello-lift at {new
> _root_.java.util.Date}</span>
> val http = new Http
> val bos = new ByteArrayOutputStream
> val myRequest = new Request("http://www.bom.gov.au/fwo/IDV60901/
> IDV60901.94868.json")
> val rawdata = http(myRequest >>> bos)
> val bs = bos.toString
> val db = :/("www.bom.gov.au")
>
> val json = parse(bs)
>
> implicit val formats = net.liftweb.json.DefaultFormats
> case class Notice(copyright: String, copyright_url: String,
> disclaimer_url: String)
> case class Header(refresh_message: String, ID: String, main_ID:
> String, name: String, state_time_zone: String,
> time_zone: String, product_name: String, state:
> String)
> case class Data(sort_order: Int, wmo: Int, history_product: String,
> local_date_time: String,
> local_date_time_full: Int, air_temp: Double, dewpt:
> Double, apparent_t: Double,
> rel_hum: Double, delta_t: Double, wind_dir: Double,
> wind_spd_kt: Double, gust_kt: Double,
> wind_spd_kmh: Double, press: Double, rain_trace:
> Double)
> case class Observation(notice: Notice, header: Header, data: List
> [Data])
> json.extract[Observation]
>
--
You received this message because you are subscribed to the Google Groups
"Lift" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=en.