programing

gson을 사용하여 중첩된 JSON 구문 분석

magicmemo 2023. 2. 25. 20:52
반응형

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

반응형