programing

GSON을 사용한 JSON 파일 해석

padding 2023. 3. 29. 21:16
반응형

GSON을 사용한 JSON 파일 해석

JSON 파일을 JAVA에서 GSON을 사용하여 해석합니다.

{
    "descriptor" : {
        "app1" : {
            "name" : "mehdi",
            "age" : 21,
            "messages": ["msg 1","msg 2","msg 3"]
        },
        "app2" : {
            "name" : "mkyong",
            "age" : 29,
            "messages": ["msg 11","msg 22","msg 33"]
        },
        "app3" : {
            "name" : "amine",
            "age" : 23,
            "messages": ["msg 111","msg 222","msg 333"]
        }
    }
}

루트 요소인 : descriptor, 그 다음 app3 요소, 마지막으로 name 요소로 넘어가는 방법을 모르겠습니다.

이 튜토리얼 http://www.mkyong.com/java/gson-streaming-to-read-and-write-json/,에 따라 했는데 root 및 childs 요소가 있는 경우는 표시되지 않습니다.

IMO, GSON에서 JSON 응답을 해석하는 가장 좋은 방법은 응답을 "일치"하는 클래스를 만들고 메서드를 사용하는 것입니다.
예를 들어 다음과 같습니다.

class Response {
    Map<String, App> descriptor;
    // standard getters & setters...
}

class App {
  String name;
  int age;
  String[] messages;
  // standard getters & setters...
}

다음으로 다음을 사용합니다.

Gson gson = new Gson();
Response response = gson.fromJson(yourJson, Response.class);

어디에yourJson에는, any, a 또는 a 를 지정할 수 있습니다.

마지막으로 특정 필드에 액세스하려면 다음 작업을 수행합니다.

String name = response.getDescriptor().get("app3").getName();

JSON은 다른 답변에서 제시한 바와 같이 언제든지 수동으로 해석할 수 있지만, 개인적으로는 이 방법이 더 명확하고 장기적으로 유지관리하기 쉬우며 JSON의 전체 아이디어에 더 적합하다고 생각합니다.

gson 2.2.3을 사용하고 있습니다.

public class Main {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {

    JsonReader jsonReader = new JsonReader(new FileReader("jsonFile.json"));

    jsonReader.beginObject();

    while (jsonReader.hasNext()) {

    String name = jsonReader.nextName();
        if (name.equals("descriptor")) {
             readApp(jsonReader);

        }
    }

   jsonReader.endObject();
   jsonReader.close();

}

public static void readApp(JsonReader jsonReader) throws IOException{
    jsonReader.beginObject();
     while (jsonReader.hasNext()) {
         String name = jsonReader.nextName();
         System.out.println(name);
         if (name.contains("app")){
             jsonReader.beginObject();
             while (jsonReader.hasNext()) {
                 String n = jsonReader.nextName();
                 if (n.equals("name")){
                     System.out.println(jsonReader.nextString());
                 }
                 if (n.equals("age")){
                     System.out.println(jsonReader.nextInt());
                 }
                 if (n.equals("messages")){
                     jsonReader.beginArray();
                     while  (jsonReader.hasNext()) {
                          System.out.println(jsonReader.nextString());
                     }
                     jsonReader.endArray();
                 }
             }
             jsonReader.endObject();
         }

     }
     jsonReader.endObject();
}
}

이러한 문제를 해결하는 동안 기억해야 할 한 가지는 JSON 파일에서{를 나타냅니다.JSONObject및 a[가리키다JSONArray적절하게 관리할 수 있다면 JSON 파일을 해석하는 작업은 매우 간단합니다.위의 코드는 저에게 큰 도움이 되었고, 이 내용이 위의 코드에 의미를 부여하기를 바랍니다.

Gson Json Reader 매뉴얼에서는 다음 해석의 처리 방법에 대해 설명합니다.JsonObjects그리고.JsonArrays:

  • 어레이 처리 방식에서는 먼저 beginArray()를 호출하여 어레이의 오프닝 브래킷을 소비합니다.그런 다음 hasNext()가 false일 때 종료되는 값을 누적하는 while 루프를 만듭니다.마지막으로 endArray()를 호출하여 어레이의 닫힘 괄호를 읽습니다.
  • 오브젝트 처리 메서드 내에서 먼저 beginObject()를 호출하여 오브젝트의 시작 브레이스를 소비합니다.그런 다음 이름을 기반으로 로컬 변수에 값을 할당하는 while 루프를 만듭니다.hasNext()가 false일 때 이 루프는 종료됩니다.마지막으로 endObject()를 호출하여 개체의 닫힘 괄호를 읽습니다.

언급URL : https://stackoverflow.com/questions/16377754/parse-json-file-using-gson

반응형