2013-06-01 1 views
3

Scalatra를 사용하고 있습니다. Scalatra는 Json4S를 사용하여 Json 문자열을 생성합니다. 나는일부 및 없음 값이 포함 된 목록에서 Json4S를 사용하여 Json 문자열 생성

[ "A", "B"]

목록 (일부 ("A"), 없음, 일부 ("B"))

를받을

I 수신하고자

[ "A"정의 "B"]

어떻게 고칠 수 있습니까?

+0

는 왜 것을 거기에 정의되지 않은 원하는가? 해당 정보의 수신자가 배열에 해당 요소가 없으면 정의되지 않은 데서 이점을 얻을 수 있습니까? – cmbaxter

+1

3 요소를 사용하여 배열을 serialize 할 때 3 개의 요소가있는 새로운 배열을받을 것으로 예상됩니다. 또한 직렬화 된 배열이 동등한 동안 목록 (일부 ("A"), 없음, 일부 ("B")) <> 목록 (일부 ("A"), 일부 ("B"), 없음) 나는 이것이 Json4S 라이브러리의 버그라고 생각한다. –

답변

1

undefined은 자바 스크립트에서 유효하더라도 유효한 json 값이 아닙니다. rfc4627 가입일 (애플리케이션/JSON)

거짓 널 참

:

JSON 값은 객체, 배열 번호 또는 문자열 또는 하나 다음 세 문자 이름이어야

(정의되지 않은 언급)

그러나이 null 대신 undefined과는 상당히 솔직하지 않습니다. 스칼라 콘솔, 처음 몇 수입 :

scala> import org.json4s._ 
scala> import org.json4s.native.Serialization.write 

고객 시리얼 :

scala> class NoneJNullSerializer extends CustomSerializer[Option[_]](format => ({ case JNull => None }, { case None => JNull })) 

그리고 짜잔가 :

scala> implicit val formats = DefaultFormats + new NoneJNullSerializer() 
scala> val ser = write(List(Some("A"), None, Some("B"))) 
ser: String = ["A",null,"B"] 
+0

None이 Map의 값일 때 문제가 해결되지 않는 것 같습니다. 암시 적 변환이 발생하기 전에 전체 키가 제거 된 것처럼 보입니다. –

+0

[편집]이 문제는 json4s라는 것을 잊어 버렸고 spray-json에 대한 의견을 남겼습니다 : – theon

+0

이 문제는 3.2.11 버전에서 해결되었습니다. DefaultFormats.preservingEmptyValues ​​만 사용하면됩니다. 문제가있는 사람은 http://stackoverflow.com/questions/27855934/json4s-ignoring-the-none-feilds-while-seriallization을 참조하십시오. –