반응형
gson을 사용하여 중첩된 JSON 구문 분석
{
"Response": {
"MetaInfo": {
"Timestamp": "2011-11-21T14:55:06.556Z"
},
"View": [
{
"_type": "SearchResultsViewType",
"ViewId": 0,
"Result": [
{
"Relevance": 0.56,
"MatchQuality": {
"Country": 1,
"State": 1,
"County": 1,
"City": 1,
"PostalCode": 1
},
"Location": {
"LocationType": "point",
"DisplayPosition": {
"Latitude": 50.1105,
"Longitude": 8.684
},
"MapView": {
"_type": "GeoBoundingBoxType",
"TopLeft": {
"Latitude": 50.1194932,
"Longitude": 8.6699768
},
"BottomRight": {
"Latitude": 50.1015068,
"Longitude": 8.6980232
}
},
"Address": {
"Country": "DEU",
"State": "Hessen",
"County": "Frankfurt am Main",
"City": "Frankfurt am Main",
"District": "Frankfurt am Main",
"PostalCode": "60311",
"AdditionalData": [
{
"value": "Germany",
"key": "CountryName"
}
]
}
}
}
]
}
]
}
}
상기 JSON에서 우편번호를 취득하려고 합니다.gson을 사용하여 해석하고 있습니다.저는 JSON을 처음 접하는 사람입니다.여기 있는 모든 투고(이것과 매우 유사한 것)에서 본 결과, 필드명은 그대로여야 한다는 것을 알았습니다.그래서 저는 4개의 클래스 viz Response, View, Result, Address를 만들어야 한다는 것을 이해했습니다.스태틱 네스트 클래스로 설정했지만 출력으로 null 값만 가져옵니다.다음 JSON에는 주소가 여러 개 있습니다.하지만 나는 이 단일한 대답에 사로잡혀 있다.
예를 들어, 이 코드로 타임스탬프를 취득하려고 하면 null 값을 얻을 수 있습니다.
public class ParseJSON {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader("try.json"));
Gson gson = new GsonBuilder().create();
Pojo pojo = gson.fromJson(br,Pojo.class);
System.out.println(Pojo.Response.MetaInfo.Timestamp);
br.close();
}
}
class Pojo {
public Pojo() { }
static class Response{
static class MetaInfo {
static public String Timestamp;
public String getTimestamp() {
return Timestamp;
}
}
}
}
필요한 것은"PostalCode"
, 를 사용할 수 있습니다.JsonParser
수업을 많이 듣는 대신
JsonParser jsonParser = new JsonParser();
JsonObject address = jsonParser.parse(json)
.getAsJsonObject().get("Response")
.getAsJsonObject().getAsJsonArray("View").get(0)
.getAsJsonObject().getAsJsonArray("Result").get(0)
.getAsJsonObject().get("Location")
.getAsJsonObject().getAsJsonObject("Address");
String postalCode = address.get("PostalCode").getAsString();
또는 모든 결과에 대해:
JsonArray results = jsonParser.parse(json)
.getAsJsonObject().get("Response")
.getAsJsonObject().getAsJsonArray("View").get(0)
.getAsJsonObject().getAsJsonArray("Result");
for (JsonElement result : results) {
JsonObject address = result.getAsJsonObject().get("Location").getAsJsonObject().getAsJsonObject("Address");
String postalCode = address.get("PostalCode").getAsString();
System.out.println(postalCode);
}
타임스탬프의 예를 유효하게 하려면 , 다음의 순서에 따릅니다.
public class ParseJSON {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader("try.json"));
Gson gson = new GsonBuilder().create();
Pojo pojo = gson.fromJson(br, Pojo.class);
System.out.println(pojo.Response.MetaInfo.Timestamp);
br.close();
}
}
class Pojo {
Response Response = new Response();
}
class Response {
MetaInfo MetaInfo = new MetaInfo();
}
class MetaInfo {
String Timestamp;
}
언급URL : https://stackoverflow.com/questions/8233542/parse-a-nested-json-using-gson
반응형
'programing' 카테고리의 다른 글
순수 css를 사용하는 다른 요소의 너비를 기준으로 스팬의 너비를 설정합니다. (0) | 2023.02.25 |
---|---|
AngularJS: 모델에 대한 2방향 바인딩을 선택하지 않음 (0) | 2023.02.25 |
"net:"을 가져오는 중:일부 AJAX 호출에서 ERR_BLOCKED_BY_CLIENT" 오류가 발생했습니다. (0) | 2023.02.25 |
.htaccess를 사용하여 HTTP를 HTTP로 리다이렉트합니다. (0) | 2023.02.25 |
Lombok을 사용한 Spring Boot 로깅 (0) | 2023.02.25 |