2014-11-10 3 views
1

У меня есть следующий JSON ответ от сервера, на котором объектно выборку содержитспрей JSON - разобрать только часть ответа JSON

{ 
    "op":{ 
     "samples":{ 
      "name1" :[0,0,0,0,0,0,0], 
      "name2" :[0,0,0,0,0,0,0], 
      "name3" :[0,0,0,0,0,0,0], 

      //About 100 more names 

      "name99" :[1,2,3,4,5,6,7], 
      "name100" :[0,0,0,0,0,0,0], 

     }, 
     "samplesCount":60, 
     "isPersistent":true, 
     "lastTStamp":1415619627689, 
     "interval":1000 
    }, 
    "hot_keys":[ 
     { 
     "name":"counter::F03E91E2A4B9C25F", 
     "ops":0.11010372549516878 
     } 
     //About 40 objects 
    ] 
} 

мне нужны только некоторые части этого результата.

следующие свойства необходимы:

name1, name23, timeStamp and isPersistant 

Так что я создал следующие классы дела и его неявных парсеры:

case class Samples(name1[Int],name23[Int]) 
    case class Op(samples:Samples,lastTStamp:String,isPersistent:Boolean) 
    case class BucketStatisticResponse(op:Op) 

    object BucketStatisticJsonProtocol extends DefaultJsonProtocol { 
    implicit val samplesFormat = jsonFormat2(Samples) 
    implicit val opFormat = jsonFormat3(Op) 
    implicit val bucketStatisticFormat= jsonFormat1(BucketStatisticResponse) 
    } 

, но я получаю следующее сообщение об ошибке:

spray.httpx.PipelineException: MalformedContent(Expected String as JsString, but got 1069547520,Some(spray.json.DeserializationException: Expected String as JsString, but got 1069547520)) 

Не могли бы вы помочь?

ответ

2

Сообщение об ошибке говорит, что спрей-JSON ожидал строки, но получил STH еще, кажется, вам нужно определить «lastTStamp» в классе Op как Лонг, как это:

case class Op(samples:Samples, lastTStamp:Long, isPersistent:Boolean) 
+0

Да, действительно, строки в формате JSON должны быть завернуты в двойные кавычки. – jrudolph

Смежные вопросы