Lift JsonResponse Строка с обратной косой чертой - PullRequest
0 голосов
/ 16 ноября 2011

все!

Я пытаюсь создать веб-сервис Rest с Lift и Scala, который получает результаты от MOngoDB с функциями уменьшения карты.Например, это моя сервисная функция:

val map ="""function map(){ 
 filteredDur= [];
 this."""+sendername+""".forEach(function (s){
  if (s.start > new ISODate(""""+ timestamp +""":00.00+02:00")){
    filteredDur.push(s);
  }
 });
 filteredDur.sort(function(a,b) {
   return a.start-b.start
 })
 emit(this._id, {After: filteredDur});
}"""

 val reduce = "function(key, values) { return values[0]; }"
 val mr = MapReduceCommand(mongoColl.getName(), map, reduce, MapReduceInlineOutput, None,  None, None, None)
 val result = mongoColl.mapReduce(mr)
 var temp = result.toString()
   //here some transformations of map_reduce result like getting read of map_reduce      //comments
 return JString(temp);

serve { //this are Lift's RestHelper methods
 case Req("sendungen" :: "sendungen" ::Nil, suffix,  GetRequest) => getAllSendungen()
}

Я использую RestHelper в Lift.проблема в том, что я не получаю действительный JSON :( Я получаю все кавычки с обратной косой чертой. результат:

{ \"desc\" : \"\" , \"duration\" : 30 , \"start\" : { \"$date\" : \"2010-07-13T09:30:00Z\"} , \"end\" : { \"$date\" : \"2010-07-13T10:00:00Z\"} 

, и мой анализатор клиента не анализирует это. Поэтому я хочу:

{ "desc" : "" , "duration" : 30 , "start" : { "$date" : "2010-07-13T09:30:00Z"}

Как я могу заставить это работать? Я знаю, что могу заменить косую черту в клиентском приложении, но я не думаю, что это очень элегантно. Я пытался использовать классы случаев, но получил то же самое. Вот класс случаев:

 case class Sendung(duration:Int, subtitle:String, desc:String,  image:String,       sender:String,end:java.util.Date, title:String, start:java.util.Date) {

  def toJSON (e : Sendung) : JObject = {
  import net.liftweb.json.JsonDSL._
  import net.liftweb.json.JsonAST._
   ("key" ->
   ("duration" -> JInt(duration))) ~
   ("subtitle" -> subtitle) ~
   ("desc" -> desc));
  }

 }

Ответы [ 2 ]

1 голос
/ 11 декабря 2011

Мы столкнулись с похожей проблемой в нашем проекте - нам нужно было вернуть JSON через объект JsonResponse.На самом деле это было так же просто, как сделать:

val json = ("userId" -> userId) ~ ("userToken" -> userToken)
JsonResponse(json)

С этим вы получите хороший, неэкранированный JSON в ответе.Ваш синтаксический анализатор на стороне клиента должен уметь работать с этим.

1 голос
/ 17 ноября 2011

Решено: JsonResponse.apply (net.liftweb.json.JsonParser.parse (result_string))

возвращает LiftResponse без обратной косой черты.к сожалению, у JString нет опции тройных кавычек.вот почему это не сработало

...