최근에 나는 Spray-json의 소스 코드를 읽었습니다. 나는 JsonFormat.scala
에서 다음과 같은 계층 구조 관계, 코드는 아래를 참조하시기 바랍니다 주목spray-json이 RootJsonFormat에서이 계층 구조 방식을 적용하는 이유는 무엇입니까?
/**
* A special JsonFormat signaling that the format produces a legal JSON root
* object, i.e. either a JSON array
* or a JSON object.
*/
trait RootJsonFormat[T] extends JsonFormat[T] with RootJsonReader[T] with RootJsonWriter[T]
, 내가 계층 구조의 아래 그림 그리기보다 편리 혼란을 표현하기 : 내 제한에 따라
을 스칼라에 대한 지식, 나는 위의 코드에서 JsonFormat[T] with
을 제거해야한다고 생각합니다. 그럼를 분무 JSON의 저장소를 복제하고, 그럼 난 (package/compile
명령을 사용하여) SBT에서 컴파일 코드 JsonFormat[T] with
trait RootJsonFormat[T] extends RootJsonReader[T] with RootJsonWriter[T]
을 언급하며 컴파일 과정에 전달하고 성공적으로 spray-json_2.11-1.3.4.jar
를 생성합니다. 내가 SBT의 test
명령을 통해 테스트 케이스를 실행할 때
그래서 나는 이유를 알고 싶습니다. 미리 감사드립니다.
설명해 주셔서 감사합니다. 'RootJsonFormat'이 줄어들 수 있다고 생각합니까? 왜냐하면'JsonFormat'은'JsReader'와'JsWriter'의 두 가지 용량을 소유하고 있기 때문입니다. – xyz
네,'RootJsonFormat'은 약간 중복 된 것 같습니다. 그럼에도 불구하고 그것 자체의 목적을 수행합니다. JsonFormat은 integer 나 string과 같은 프리미티브를 포함하여 ANY 엔티티의 직렬화 동작을 정의합니다. 'RootJsonFormat'은 다른 한편으로는이 형식이 배열'[]'또는 JSON 객체'{}'와 같은 * 루트 * 객체를 생성한다는 것을 나타내는 * 마커 *의 목적을 제공합니다. 여기에 설명되어 있습니다 : https://github.com/spray/spray-json/blob/7277ddc103d345e2ca42d6f39a21bbe8c453049b/src/main/scala/spray/json/JsonFormat.scala#L67-L71. 그래서'RootJsonFormat'은'JsonFormat'의 부분 집합이지만 더 엄격한 보증을합니다. – Zyoma
도움 주셔서 감사합니다 @Zyoma – xyz