다음 구조를 가진 JSON을 얻습니다.
{"field1": "string",
"field2": false,
"a": {
"b": {
"listString": []
},
"c": {
"listString": [],
"s": "string"
},
"parent": {
"childA": {
"listString": ["string", "string"]
},
"s": "string"
},
"parent2": {
"listString": ["string", "string"],
"s": "string"
}
},
"field3": ["s", "s"]
}
해당 필드의 형식이 변경 될 수 있으므로 parent
(및 parent2
)에 문제가 있습니다. 복잡한 객체의 형식 동안 b
및 c
숙박 동일. 예를 들어, parent
다음과 같은 parent2
방법으로 (에 대한 동일한 보류)를 얻을 수 있습니다 .
{"parent": {
"childA":{
"listString": ["ssssa", "a"]
},
"s": "string"
}}
또는
{"parent": {
"listString": ["ssssa", "a"],
"s": "string"
}}
또한, childA
필드 (있는 경우) 다른 이름을 가질 수 있습니다, 그것은 할 수 있습니다 childB
또는childC
복잡한 객체에 대한 Java 클래스를 만들었습니다.
public class MyPojo{
private String[] field1;
private String field2;
private A a;
private String field3;...}
public class A{
private B b;
private C c;
private Parent parent;
private Parent2 parent2;..}
public class Parent{
private String s;
private ChildA childA;...}...
parent
및 parent2
객체의 형식이 다른 경우 Gson으로 이와 같은 것을 어떻게 역 직렬화 할 수 있습니까?
이것은 부모 클래스입니다.
public class Parent {
Map<String, JsonElement> parent = null;
public Map<String, JsonElement> getParent() {
return parent;
}
public void setParent(Map<String, JsonElement> parent) {
this.parent = parent;
}
}
이것은 주요 클래스입니다.
public static void main(String[] args) {
// TODO Auto-generated method stub
String input = "{\"parent\": {\"s\": \"string\",\"childA\":{\"listString\": [\"ssssa\", \"a\"]}}}";
Gson gsonInstance = null;
gsonInstance = new GsonBuilder().create();
Parent p = gsonInstance.fromJson(input, Parent.class);
Map<String, JsonElement> parentMap = p.getParent();
Set<String> keyMap = parentMap.keySet();
Iterator<String> iter = keyMap.iterator();
while(iter.hasNext()){
String name = iter.next();
if(name.matches("child(.*)")){
System.out.println(parentMap.get(name));
// do your logic
}
if (keyMap.contains("listString")){
List<String> listString = getListString(parentMap.get("listString"));
System.out.println(listString.toString());
}
}
}
public static List<String> getListString(JsonElement list){
Type listType = new TypeToken<List<String>>() {}.getType();
List<String> listString = new Gson().fromJson(list, listType);
return listString;
}
도움이 되었기를 바랍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다