2011-11-16 2 views
0

모두!리프트 JsonResponse 역 슬래시 문자열

지도 축소 기능을 사용하여 MOngoDB의 결과를 가져 오는 Lift 및 Scala를 사용하여 Rest 웹 서비스를 만들려고합니다. 예를 들어 이것은 내 서비스 기능입니다.

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를 사용하고 있습니다. . 문제는 결과 내가 유효한 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)); 
    } 

} 
+0

코드를 포맷하는 것은 어떻습니까? –

+0

죄송합니다.이 눈금의 여러 따옴표는 모든 것을 엉망으로 만들고 있습니다. ( – Nigul

답변

1

해결 : Json Response.apply (net.liftweb.json.JsonParser.parse (result_string))

은 백 슬래시가없는 LiftResponse를 반환합니다. 불행히도 JString에는 트리플 쿼트 옵션이 없습니다. 그것이 작동하지 않는 이유입니다.

1

우리 프로젝트에서 비슷한 문제가 발생했습니다. JSON을 JsonResponse 객체를 통해 반환해야했습니다. 실제로는 다음과 같이 간단했습니다.

응답으로 멋진 이스케이프 처리되지 않은 JSON을 얻을 수 있습니다. 클라이언트 쪽 파서가이를 작동 할 수 있어야합니다.

+0

약간 다른 상황이 있습니다. 속성 이름을 암시 적으로 사용하지 않는 것이 좋습니다. 변경 될 수는 있지만 어쨌든 응답 해 주셔서 감사합니다!) – Nigul