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
'programing' 카테고리의 다른 글
리액트 라우팅은 다른 URL 경로를 처리할 수 있지만 Tomcat은 404개의 사용 불가능한 리소스를 반환합니다. (0) | 2023.03.29 |
---|---|
JSON 구문 오류: '예상하지 않은 번호' 또는 'JSON.parse: 개체의 속성 값 뒤에 ' , 또는 '}'이(가) 있어야 합니다.' (0) | 2023.03.29 |
개체를 인코딩 가능한 개체로 변환하지 못했습니다. (0) | 2023.03.29 |
React 라우터를 사용하여 프로그래밍 방식으로 탐색 (0) | 2023.03.29 |
Spring 부트버전 2.1.4에서 2.1.5로 변경하면 알 수 없는 설정 Maven 오류가 발생하는 이유는 무엇입니까? (0) | 2023.03.29 |