이 콘텐츠가 포함 된 JSON이 있습니다.
[ {
"lines" : {
"0" : "Hammersmith & City",
"1" : "Circle"
},
"id" : "233",
"name" : "Shepherd's Bush Market"
}, {
"lines" :"",
"id" : "233",
"name" : "Shepherd's Bush Market"
}, {
"lines" : {
"0" : "Hammersmith & City",
"1" : "Circle"
},
"id" : "233",
"name" : "Shepherd's Bush Market"
},
, {
"lines" : "",
"id" : "233",
"name" : "Shepherd's Bush Market"
}]
일반적으로 다음과 같은 개체를 만들 수 있습니다.
public class MyObject {
public String id;
public String name;
public Line[] lines;
public class Line {
public String key;
public String value;
}
}
그리고 Gson serializer가 구문 분석을 처리하지만이 경우 lines
에는 키 / ID가 없습니다. 내부 클래스 대신 HashMaps
및 Maps
사용을 시도했지만 작동하지 않습니다. Gson을 사용하여 이것을 구문 분석 할 수있는 방법이 있습니까?
최신 정보:
lines
에서 MyObject
a로 변경 Map<String, String>
하고 JSON 응답에 더 많은 줄을 추가했습니다.
현재 이것은 JSON을 구문 분석하는 데 사용하는 코드입니다.
Type listType = new TypeToken<List<MyObject>>(){}.getType();
List<MyObject> data = getGson().fromJson(str, listType);
Caused by: com.google.gson.JsonParseException: The JsonDeserializer MapTypeAdapter failed to deserialize json object "" given the type java.util.Map<java.lang.String, java.lang.String>
전체 JSON 응답을 살펴본 결과 사용할 수없는 경우 lines
빈 String
( "") 으로 반환되고 사용 가능한 경우지도로 반환되는 것 같습니다 . 이것이 문제의 일부라고 생각합니다
Map<String, String>
대신 사용하십시오 Line[] lines
.
(수업 필요 없음 Line
)
작동합니다.
또는 키가 정수인 경우 Map<Integer, String>
에도 작동합니다.
[편집하다]
json 문자열은 객체 목록을 나타냅니다. {..},{..},{..}
당신은 그것을 []
.
따라서 작동하는 json은 다음과 같아야합니다.
[
{
"lines": {
"0": "Hammersmith & City",
"1": "Circle"
},
"id": "233",
"name": "Shepherd's Bush Market"
},
{
"lines": {
"0": "Hammersmith & City",
"1": "Circle"
},
"id": "233",
"name": "Shepherd's Bush Market"
},
{
"lines": {
"0": "Hammersmith & City",
"1": "Circle"
},
"id": "233",
"name": "Shepherd's Bush Market"
}
]
MyObject
public class MyObject {
public String id;
public String name;
public Map<String,String> lines;
}
주요 방법
Gson gson = new Gson();
Type type = new TypeToken<List<MyObject>>(){}.getType();
List<MyObject > objList = gson.fromJson(str, type);
assert(objList != null); // validate not null
for(MyObject obj : objList){
System.out.println("id=" + obj.id + "; name=" + obj.name);
}
산출:
id=233; name=Shepherd's Bush Market
id=233; name=Shepherd's Bush Market
id=233; name=Shepherd's Bush Market
루프에서 추출 할 수도 Map
있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다