그리 일반적인 상황이 아닙니다.
여기 {"SomeElements":[{"Id":"Title","Info":"{\"Text\": \"Sometext\"}"}]}
deserialized 문자열에 다른 JSON이 포함 된 경우 GSON
그것의 그래픽 표현입니다 :
문제는 그 문자열 Info
다른 JSON
문자열이 포함되어있다
나는 서버에서 다음 JSON 문자열을 가지고있다. 하지 문자열로 Info
문자열을 구문 분석하는 몇 가지 방법이 있지만, HashMap의 등 (예를 들어) 내 POJO에 -
public class Test {
private ArrayList<SomeElement> SomeElements;
public class SomeElement {
private String Id;
private String Info;
}
}
질문 : 여기
내 POJO입니까?
HashMap<String, String>
으로 신고하려고하면 "Expected OBJECT, but was STRING"
오류가 있습니다.
이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 사용자 지정 디시리얼라이저가 유일한 방법입니까?
!!이 질문은 중복되지 않습니다 !!
서버에서 JSON 응답을 변경할 수 없습니다.
주의 깊게 읽으십시오 - Info
문자열을 문자열이 아닌 다른 JSON으로 구문 분석 할 수 있습니까?
해결책 나는 다음으로 끝났다.
private LinkedTreeMap<String, String> infoMap;
을 선언하고 Info
을 문자열로 먼저 deserialize하십시오. 그런 다음 :
public LinkedTreeMap<String, String> getInfoMap() {
if (infoMap == null) {
infoMap = new Gson().fromJson(info, new TypeToken<Map<String, String>>(){}.getType());
}
return infoMap;
}
나는이 정의 디시리얼라이저를 쓰는 것보다 훨씬 더 쉽게 생각하지만, 어쩌면 더 복잡한 경우에 사용자 정의 디시리얼라이저가 유일한 선택이 될 것입니다.
그래서 일반적으로 @arjabbar의 대답이 더 잘 작동합니다.
당신이 그것을하고 싶은 이유는 무엇입니까? – once2go
간단 - 서버 측의 응답을 사용 가능한 클래스로 구문 분석하려고합니다. –