2014-02-16 3 views
-1

이 JSON 문자열을 이해하는 데 문제가 있습니다.GSON으로 JSON 해석 및 읽기

{ 
    "results":[ 
     { 
      "user":{ 
       "gender":"female", 
       "name":{ 
        "title":"miss", 
        "first":"taylor", 
        "last":"anderson" 
       }, 
       "location":{ 
        "street":"3645 dogwood ave", 
        "city":"roseburg", 
        "state":"new hampshire", 
        "zip":"20963" 
       }, 
       "email":"[email protected]", 
       "username":"heavyduck595", 
       "password":"liverpool", 
       "salt":"UK`o;9a_", 
       "md5":"6c8db0305b4591d8d9820d9f8edfd162", 
       "sha1":"906df4c09f3a87899666cb57bf974bd9b1950ea6", 
       "sha256":"3b12f5e51688578f845bef8ae1750d3e263c2010691010a80ce632a6b2323c03", 
       "registered":"1359027425", 
       "dob":"16243995", 
       "phone":"(934)-888-7068", 
       "cell":"(727)-467-8384", 
       "SSN":"697-20-6143", 
       "picture":"http://api.randomuser.me/0.3/portraits/women/30.jpg" 
      }, 
      "seed":"5eaf02877746c7e", 
      "version":"0.3" 
     } 
    ] 
} 

처음으로 JSON을 처음 사용하고 적절하게 해석하려고합니다. 이것은 내가 지금까지 가지고있는 코드입니다 :

static class Results{ 
      String results; 
     } 

     static class User{ 
      String gender; 
      String name; 
      String location; 
      List<Results> items; 
     } 


     private static String readUrl(String urlString) throws Exception { 
      BufferedReader reader = null; 
      try { 
       URL url = new URL(urlString); 
       reader = new BufferedReader(new InputStreamReader(url.openStream())); 
       StringBuffer buffer = new StringBuffer(); 
       int read; 
       char[] chars = new char[1024]; 
       while ((read = reader.read(chars)) != -1) 
        buffer.append(chars, 0, read); 

       return buffer.toString(); 
      } finally { 
       if (reader != null) 
        reader.close(); 
      } 
     } 

     public void larry() throws Exception{ 
      String json = readUrl("http://api.randomuser.me/"); 
      System.out.println(json); 
      Gson gson = new Gson();   
      User page = gson.fromJson(json, User.class); 

      System.out.println(page.name); 
      for (Results item : page.items) 
       System.out.println(" " + item.results); 
     } 
+0

들여 쓰기를 인쇄하기위한 다른 방법으로 ""와 같은 여러 개의 공백 대신 표제기를 "\ t"사용할 수 있습니다. – Kuchi

+1

다른 작업을하기 전에 json.org로 이동하여 JSON 구문을 익히는데 5 분이 걸립니다. 매우 간단하고 이해하기 쉽습니다. 그런 다음 GSON과 같은 것을 사용하여 직접 사용자 정의 Java 객체를 생성하기 전에 "깨끗한"JSON 파서 중 하나를 사용하여 JSON을지도와 목록으로 구문 분석하고 그 주위의 방법을 학습하십시오. 그렇다면 GSON 외의 복잡성은 훨씬 이해하기 쉬울 것입니다. –

+0

(Google은 "JSON 온라인 파서"용) - JSON 문자열을 구문 검사하고 형식을 지정하는 몇 가지 온라인 도구가 있으므로 읽기 쉽습니다. –

답변

0

JSON 또는 사용자의 Java 클래스에 매핑하는 데 특별히 복잡한 것은 없습니다. 기본 구조 만 이해하면됩니다.

JSON은 정확히 하나의 필드가있는 개체입니다. results. 이것은 {}의 의미입니다.

{ "results": ... } 

그 필드에는 배열이 있습니다. 그게 []입니다.

{ "results": [ ... ] } 

그 배열에는 다른 객체가 들어 있습니다 (배열에 하나 이상의 객체가 있지만 아마도 게시 한 JSON에 하나만 있습니다). 그 객체는 3 개의 필드를 가지며, 그 중 하나 ("user")는 다른 객체와 다른 두 개의 문자열을 보유하고 있습니다.

자신의 클래스에 그 매핑하려면, 당신은 단순히 그 JSON처럼 보이게 : 등

class JsonResult { 
    List<Result> results; // JSON arrays map to Java Lists 
} 

class Result { 
    User user; 
    String seed; 
    String version; 
} 

class User { 
    String gender; 
    Name name; 
    // and so on ... 
} 

class Name { 
    String title; 
    String first; 
    String last; 
} 

그리고있다. JSON에서 객체 (다시 말하면 {}으로 표시)와 일치하는 클래스를 빌드하고 이에 따라 모든 것을 구조화합니다.

@HotLicks는 주석에 주석을 달아 Java 클래스에 매핑하지 않고 "깨끗한"파서를 사용할 수 있습니다. 실제로, Gson은 이것을 JsonParser 클래스와 함께 제공합니다. json으로 액세스하여

JsonObject root = element.getAsJsonObject(); 
JsonArray array = root.getAsJsonArray("results"); 

: 당신은 필드 이름을 사용하여 JSON 구조에 액세스 할 수 있습니다 거기에서

JsonElement element = new JsonParser().parse(yourJsonString); 

: 이것은 단지 당신이 원하는 정보를 추출 할 수있는 나무로 JSON을 구문 분석 구조 당신이 원하는대로 얻을 수 있습니다.

관련 문제