2011-12-07 2 views
0

Jackson과 간단한 데이터 바인딩을 할 수 있다는 것을 보았을 때 나는 본능적으로 매우 유용하다고 느꼈습니다. 특정 Java 클래스를 설계/작성하지 않아도된다는 전망은 매우 매력적입니다. 그러나 나는 데이터 바인딩이 실제로 얼마나 빠른지를 이해하지 못하고있다. Map<String, Object>으로 끝내면 그 데이터를지도에서 꺼내기 위해 뛰어 넘기 위해 상당한 양의 농구가 있습니다.Jackson이 JSON으로 간단한 데이터 바인딩 ... 도움이되는 이유는 무엇입니까? 내가 무엇을 놓치고 있습니까?

다른 종류의 구문 분석 두통으로 끝나기 때문에 나는 여기에서 뭔가를 놓치고 있어야합니다. 직접 JSON을 직접 구문 분석하거나 전체 바인딩을위한 클래스를 작성하는 대신 모든 유형의 캐스팅 등을 사용하여 치아를 당겨 Map에서 올바른 데이터를 가져와야합니다.

무엇이 누락 되었습니까? 누군가 간단한 데이터 바인딩이 빛나는 곳을 보여줄 수 있습니까?

답변

2

간단한 데이터 바인딩은 구문 분석중인 JSON의 특정 구조를 모르고 프로그래밍 방식으로 처리해야하는 상황에서 유용 할 수 있습니다. 구조가 구성에 정의되어 있는지, 어쩌면 구조에 정의되어 있지 않을 수도 있습니다.

트리 모델을 사용할 수도 있지만 간단한 데이터 바인딩이 더 쉽습니다.

JSON 구조가 컴파일 타임에 알려졌다면 전체 데이터 바인딩 (Java 클래스)을 사용하는 것이 좋습니다.

+0

어떤 시점에서 런타임 전에 데이터가 무엇인지 알아야 할 것입니까? 그렇지 않으면, 당신은 어떤 Object 값을 'HashMap '처럼 어떻게 알 수 있습니까? – LuxuryMode

+2

- 반드시 이름에 어떤 구조 정보 (예 : "name.that.implies. 통로"). 또는 파일에서 구조적 정의를 읽을 수 있습니다. 또는 구조가 매우 다양하여 순열 수가 많습니다. 구조를 찾는 방법; 'typeof'를 사용하여 속성의 구조를 파악할 수 있지만이 스타일에서는 Tree Model (JsonNode)이 실제로 더 편리합니다. – StaxMan

1

나는 이것이 보통 더 간단하다고 주장하지 않을 것이므로, 그 점을 보지 못한다면이 스타일을 완전히 무시해도된다. Jackson이 여러 모델 (데이터 바인딩/유형 지정, 트리 모델, 스트리밍)을 제공하는 이유는 서로 다른 종류의 트레이드 오프를 제공하기 때문입니다. 그리고 하나가 당신을 위해 잘 작동하는 경우에 모두를 사용할 필요가 없습니다.

하지만 내가보기에 가장 많이 볼 수있는 것은 코드를 단순화하는 것입니다. 여기서 수행하는 작업은 하나 또는 두 개의 값을 추출하는 것입니다. 그렇다면 클래스를 정의하는 것이 불필요한 것처럼 보일 수 있습니다. 또 다른 가능성은 재귀 적 데이터 구조입니다.

내가 생각하는 마지막 이유는 많은 개발자들이 "유형이없는"객체 (Perl에서는 "해시")를 처리하는 것이 일반적 인 스크립팅 언어 (perl, javascript)에서 왔습니다. 그들에게 이것은 가장 자연스러운 접근법처럼 보일 수 있습니다.

관련 문제