JSON을지도에있는 POJO로 올바르게 역 직렬화하는 데 문제가 있습니다.
다음과 같은 임의의 키 수로 JSON 사전을 반환하는 웹 서비스에 연결합니다.
{
"arbitray_key_name": {
"foo_sticks": "objectName"
"bar_socks": ["A", "B"]
},
"another_key_name: {
"foo_sticks": "differentName"
"bar_socks": ["C", "D", "E"]
}
...
}
Gson을 사용하여 HashMap으로 역 직렬화하고 있습니다. 만약 내가한다면
HashMap<String, Object> map = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, Object>>() {}.getType());
위의 JsonData (분명히 ... 빼기)를 사용하면 2 항목의 HashMap, 'arbitray_key_name', 'another_key_name'의 키가 예상되는 것을 정확히 얻습니다. 여기서 각 값은 올바른 키 / 값이있는 맵입니다. 자식 개체에 대한 정보.
그러나 다음과 같은 값을 역 직렬화하려는 POJO 클래스가 있습니다.
public class FooInfo {
@Key("foo_sticks")
public String fooSticks;
@Key("bar_socks")
public String[] barSocks;
}
내가 노력한다면
HashMap<String, FooInfo> map = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, FooInfo>>() {}.getType());
그런 다음 각 값이 FooInfo이지만 두 FooInfo 개체의 필드가 모두 null이고 Json이 개체에 매핑되지 않은 두 항목의 HashMap을 반환합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
그 @Key
주석을 어디서 얻었는지 모르겠지만 Gson은 @SerializedName
.
변경 후 수업이 있습니다.
public class FooInfo {
@SerializedName("foo_sticks")
public String fooSticks;
@SerializedName("bar_socks")
public String[] barSocks;
@Override
public String toString() {
return "FooInfo [fooSticks=" + fooSticks + ", barSocks=" + Arrays.toString(barSocks) + "]";
}
}
그런 다음 JSON을 구문 분석합니다.
{
"arbitray_key_name": {
"foo_sticks": "objectName",
"bar_socks": ["A", "B"]
},
"another_key_name": {
"foo_sticks": "differentName",
"bar_socks": ["C", "D", "E"]
}
}
개체에서 제대로 읽을 수 있습니다.
HashMap<String, FooInfo> map = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, FooInfo>>() {}.getType());
System.out.println(map);
예상되는 출력을 얻으십시오.
{another_key_name=FooInfo [fooSticks=differentName, barSocks=[C, D, E]], arbitray_key_name=FooInfo [fooSticks=objectName, barSocks=[A, B]]}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다