2014-06-12 4 views
1

내 Java 응용 프로그램은 jackson으로 주석 처리되고 클라이언트 측에서 전체적으로 json으로 직렬화 된 복잡한 객체 그래프를 사용합니다. 최근 도메인 모델의 객체 중 하나를 변경하여 X 유형의 두 자녀 대신 Set<X>을 포함해야합니다. 이 변경된 객체는 모델의 여러 유형의 객체에 의해 참조됩니다.새로운 Java 모델과 일치하도록 JSON 데이터 변환

이제이 새로운 객체 모델로 변환해야하는 단위 테스트를 실행하기 위해 json 형식으로 많은 양의 테스트 데이터가 있습니다. json 파일을 업데이트하기위한 내 첫 번째 생각은 이전 버전의 Java 객체 모델을 사용하여 json 데이터를 deserialize하고 새 객체 모델을 사용하여 새 객체를 만들고 이전 객체의 새 객체를 수화 한 다음 새 객체를 다시 직렬화하는 것이 었습니다. json. 나는 객체 그래프가 상대적으로 깊고 단순한 복제물이 아니기 때문에 프로그래밍 방식으로 일치하는 객체 그래프를 생성하고 그 객체 그래프를 수화하는 과정이 손으로 json을 고치는 것만 큼 지루할 수 있다는 것을 알았습니다.

나는이 json 파일을 손으로 완전히 고칠 수있는 방법이 궁금합니다. 나는 심지어 자바가 아닌 자바 기반의 변형이나 파싱 툴을 제안하지 않는다.

답변

1

문제가되는 객체가 구조적으로 밀접하게 관련되어 있으면 하나의 데이터 바인딩 설정을 사용하여 읽기만하고 다른 객체를 사용하여 쓰기 만하면됩니다.

예 : Jackson을 사용하는 경우 맞춤 설정 및 가져 오기 방법을 구현할 수 있습니다. 아동 유형을위한 세터가 존재할 수 있도록; 그러나 Set 값에 대해서만 getter. 다음과 같은 것 :

``` public class POJO { private X a, b;

public void setA (X 값) {a = 값; } public void setB (X value) {b = 값; }

public X [] getValues ​​() { return new X [] {a, b}; } ```

POJO는 JSON으로, 두 개의 오브젝트 값 특성, "A"와 "B"를 가지고 있지만, 하나 개의 속성 "값"이 구조를 작성합니다 경우, 단지 예로서, 구조를 읽을 것 2 개의 Object의 배열 이것은 (역 직렬화) 및 직렬화 (쓰기)가 대칭 또는 동일하지 않아도된다는 기본 개념의 예입니다.

+0

그래, 내가 찾고 있던 바로 그거야! 특정 방식으로 문제에 대해 생각해 왔고 deserialization/serialization을 비대칭으로 생각하지 않았습니다. 내 부분에 대한 최소한의 코딩으로 큰 효과를 거두었습니다. – Tom

+0

@Tom good - 예 가능한 방법이 많아 때로는 다른 관점이 많이 도움이됩니다. – StaxMan

관련 문제