2011-11-16 49 views
0

all!電梯JsonResponse Backslashed string

我正在嘗試使用Lift和Scala來創建Rest web服務,它使用map reduce函數從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() 
} 

我在Lift中使用RestHelper。問題是我沒有得到一個有效的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類:。

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)); 
    } 

} 
+0

你如何格式化你的代碼? –

+0

對不起,這些比例的多個引號讓所有的東西都搞亂了:( – Nigul

回答

1

解決: Json Response.apply(net.liftweb.json.JsonParser.parse(result_string))

返回帶有非反斜槓的LiftResponse。不幸的是,JString沒有三重引號的選項。這就是爲什麼它沒有工作

1

我們遇到了類似的問題,我們的項目 - 我們需要通過JsonResponse對象返回JSON。它實際上很簡單:

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

這樣你就可以在響應中獲得很好的,未轉義的JSON。你的客戶端解析器應該能夠工作。

+0

我有點不同的情況,不建議隱式使用屬性名,它們可以改變,但是謝謝你的反應! – Nigul