2017-03-16 1 views
0

시스템이 JSON 데이터를 비 직렬화 할 때의 처리 순서를 이해하려고합니다.JSON을 비 직렬화 할 때 설정되는 인수는 무엇입니까?

POJO 생성시 인수가 설정 되었습니까? 또는 여러 setSomeArg (String someValu) 메서드를 호출하여 인수를 설정하는 중입니까?

검색이나 Google을 통해 내 대답을 찾지 못했습니다. 이 점에 대해 통찰력을 주셔서 감사합니다. 이것이 이미 게시물에 대한 중복 인 경우 링크를 게시하고 중복이라고 말하면 안됩니다. 감사.

답변

0

역 직렬화 프로세스는 내부 검사/반사를 사용합니다. 즉, JSON에서 발견 된 것과 동일한 속성을 확인한 후 클래스 속성 유형에 따라 값을 설정합니다 (즉, 정수로 값을 변환합니다. 정수 인 경우).

프로세스는 재귀 적입니다. 따라서 POJO에 다른 POJO 속성이있는 경우 모든 속성이 설정 될 때까지 JSON 값을 객체로 구문 분석하려고 시도합니다. 난 당신이 사용하고있는 라이브러리 모르겠지만, Genson는, 예를 들어, 그것은 것입니다 그리고

POJO myPojo = POJO.class.newInstance(); 

과 같은 방식으로 성찰/반사를 통해 호출하기 위해 속성없이 생성자를 요구 같은 방법으로 각각의 속성을 설정 https://docs.oracle.com/javase/tutorial/reflect/member/fieldValues.html

+0

나는 FasterXML.Jackson 라이브러리를 사용하고 있습니다 :

long value = Long.ParseLong(myJson.get('value')); // The example field is a long int Field f = POJO.getClass().getDeclaredField("aFieldName"); f.setLong(myPojo, value); 

좀 더 완전한 예제를 원하는 경우, JavaDoc를 보라. 나는 위의 것을 이해한다. 그것은 내가 궁금해하는 가치의 실제 설정 일 뿐이다. 이 속성은 JSON의 값으로 속성을 설정하여 설정하거나 해당 속성에 대해 POJO에 정의 된 setSomeMethod()를 사용합니까? – Elijah

+0

방금 ​​귀하의 의견에 맞는 답변을 편집했습니다. "setLong (objectConcerned, value)"는 내가 생각하기에, 당신이 찾고있는 방법이다. – yanneke

+0

같은 페이지에 있습니다. JSON이 pojo로 deserialize 될 때 pojo 속성이 setSomeArg (String someValu) 메서드에 의해 설정되고 이것이 항상 사실이라고 말하는 것입니다. – Elijah