2016-06-28 1 views
2

내가 스칼라-JSON 여기 https://github.com/MediaMath/scala-json스칼라-json으로 때 unserialize는

를 사용 Scala.js의 케이스 클래스 Ajax 요청에서 JSON 변환하기 위해 노력하고있어 내 수업입니다

import json._ 
implicit val msgDataAcc = ObjectAccessor.create[MsgData] 
implicit val commentErrorAcc = ObjectAccessor.create[CommentError] 

println("here2") 
val errors = JValue.fromString(req.responseText).toObject[CommentError] 
println("here3") 

이 코드는 변환이있는 문자열에서 자동으로 죽고 "here3"은 콘솔에 인쇄되지 않습니다. 여기

서버에서 내 JSON이다

{ "obj.comment": [{ "MSG"[ "error.minLength", "인수"[10]}, "OBJ .name ": [{"msg ": ["error.path.missing "]"args ": []}]}

내가 뭘 잘못하고있어? 이 문제를 해결하는 방법?

답변

0

저는 이것이 scala-js라고 추측합니다. scala-js 응용 프로그램의 최상위 레벨 (엔트리 포인트)에서 발생하는 모든 예외는 환경/브라우저에 따라 항상 제대로 출력되지는 않습니다. 전체 작업을 Try로 래핑하고 catch, 예외가 throw되는 것을 성공적으로 확인해야합니다.

위의 주요 문제는 사례 클래스에 '접근 자'를 정의해야한다는 것입니다. 이렇게하려면 두 가지 방법이 있습니다. 각 유형에 대해 암시 적으로 추가하여 상자에서 작업하고, 다른 방법은 매크로 천국을 필요로하며 사례 클래스에 접근자를 정의하는 훨씬 간단한 방법을 제공합니다.

case class MsgData(msg: Seq[String], args: Seq[Int]) extends Msg 
object MsgData { 
    implicit val acc = ObjectAccessor.create[MsgData] 
} 

case class CommentError(@name("obj.comment") comment: Seq[MsgData]) extends Error 
object CommentError { 
    implicit val acc = ObjectAccessor.create[CommentError] 
} 

implicits는 (스칼라 implicits에 대한 일반적인 규칙 다음) 삽입 될 수 있습니다 : 여기

는 정상이 아닌 매크로 낙원 방법입니다. 동반자 객체에 이들을 배치하는 것이 특별한 수입이나 필요한 것없이 어디서나 암묵적인 것을 발견 할 수있는 최선의 방법입니다.

이것은 매끈한 방법으로 자동으로 공장을 파생시키기 위해 형태가없는 circe와 같은 다른 라이브러리보다 '덜 마법적'입니다. scala-json은 확장 목적으로 접근자를 표시하는 것을 목표로하지만 일부 명시적인 상용구로 연결됩니다.

이 위의 코드로 동일한 일을
@accessor case class MsgData(msg: Seq[String], args: Seq[Int]) extends Msg 
@accessor case class CommentError(@name("obj.comment") comment: Seq[MsgData]) extends Error 

, 우리가 동반자 개체에 필드 'ACC'는 암시를 추가하는 매크로 낙원을 활용 :

은 매크로 낙원를 사용하여 아래로 줄일 수있다 자동으로

관련 문제