2013-11-18 4 views
3

У меня есть базовый JSON со всеми данными, содержащимися в массиве. Можно было бы подумать, что было бы просто вернуть значение из массива, но после нескольких часов попытки каждого разного метода разбора я мог подумать, что полностью потерял. Любая помощь будет принята с благодарностью. Извините за ужасную формулировку этого вопроса.Разбор массива JSON с использованием GSON

Я знаю, что я попытался прочитать JSON как объект с помощью JsonReader, а затем разобрался в поле ID. Это было бы моей последней попытки, код для других попыток уже удалена, боюсь, и я не могу предоставить больше информации на указанных предпринимались попытки

JsonReader reader = new JsonReader(new FileReader(Constants.VersJson)); 
     reader.beginObject(); 

     while (reader.hasNext()) { 

      String name = reader.nextName(); 

      reader.beginArray(); 

      if (name.equals("id")) { 

      System.out.println(reader.nextString()); 

Ниже я включу фрагмент массива JSON ,

"versions": [ 
{ 
    "id": "2.7", 
    "time": "2012-10-25T15:00:00+02:00", 
    "releaseTime": "2013-10-25T15:00:00+02:00", 
    "type": "Release" 
}, 
{ 
    "id": "2.6.4", 
    "time": "2011-12-2T14:01:07+02:00", 
    "releaseTime": "2013-12-2T14:01:07+02:00", 
    "type": "Develop" 
}, 
{ 
    "id": "2.5", 
    "time": "2010-11-24T21:05:00+02:00", 
    "releaseTime": "2013-11-25T01:04:05+02:00", 
    "type": "Develop" 
+1

Что вы попробовали? Почему вы думаете, что это сработает? Почему не так? –

+0

Перед тем, как проверить имя, вам необходимо начать объект. –

+0

Когда я начинаю массив перед проверкой имени, он выдает исключение IllegalStateException с: Ожидаемым BEGIN_ARRAY, но был ИМЯ в строке 2 столбца 4. –

ответ

2

Ваш формат JSON не является правильным, которые вы выложили здесь правильно это, например

{ 
    "versions":[ 
     { 
     "id":"2.7", 
     "time":"2012-10-25T15:00:00+02:00", 
     "releaseTime":"2013-10-25T15:00:00+02:00", 
     "type":"Release" 
     }, 
     { 
     "id":"2.6.4", 
     "time":"2011-12-2T14:01:07+02:00", 
     "releaseTime":"2013-12-2T14:01:07+02:00", 
     "type":"Develop" 
     } 
    ] 
} 

Первого Определение классов вы получите все

public class Version { 

     private List<Versions> versions; 

     public List<Versions> getVersions() { 
      return versions; 
     } 

     public void setVersions(List<Versions> versions) { 
      this.versions = versions; 
     } 

     @Override 
     public String toString() { 
      return "Version [versions=" + versions + "]"; 
     } 
} 

public class Versions { 

    private String id; 
    private String time; 
    private String releaseTime; 
    private String type; 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public String getTime() { 
     return time; 
    } 
    public void setTime(String time) { 
     this.time = time; 
    } 
    public String getReleaseTime() { 
     return releaseTime; 
    } 
    public void setReleaseTime(String releaseTime) { 
     this.releaseTime = releaseTime; 
    } 
    public String getType() { 
     return type; 
    } 
    public void setType(String type) { 
     this.type = type; 
    } 
    @Override 
    public String toString() { 
     return "Versions [id=" + id + ", time=" + time + ", releaseTime=" 
       + releaseTime + ", type=" + type + "]"; 
    } 
} 

Наконец, вы можете разбор JSON как здесь

JsonReader reader = new JsonReader(new FileReader(Constants.VersJson)); 
Gson gson = new Gson(); 
Version version = gson.fromJson(reader, Version.class); 
+0

Есть ли причина для внедрения сеттеров и геттеров для классов? Для программы, над которой я работаю, я не вижу для них никакой пользы. Не могли бы вы объяснить, когда они понадобятся? – AvP

+0

@AvP На самом деле gson основан на поле, потому что он использует отражение. В этом примере поля private недоступны вне класса, поэтому getter/setter. если у вас есть свойство публичного экземпляра, тогда нет необходимости в setter/getter, но его нехорошо сделать их общедоступными. подробнее см. подробности gson doc. https://sites.google.com/site/gson/gson-design-document –

0

я также столкнулся JSon массив разбора используя gson здесь мой код решить его

это мои функции чтения класса

JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(myFile))); 
 
\t System.out.println(reader); 
 
\t \t Gson gson = new Gson(); 
 
\t \t  JsonParser parser = new JsonParser(); 
 
\t \t \t JsonArray jArray = parser.parse(reader).getAsJsonArray(); 
 
\t \t \t  ArrayList<JsonOperations> lcs = new ArrayList<JsonOperations>(); 
 
for(JsonElement obj : jArray) 
 
\t  { 
 
\t  \t JsonOperations cse = gson.fromJson(obj , JsonOperations.class); 
 
\t \t \t  \t 
 
\t \t   lcs.add(cse); 
 
\t } 
 
\t  for (JsonOperations tUser : lcs) 
 
\t \t \t \t { 
 
\t \t \t \t \t System.out.println(tUser); 
 
\t \t \t \t \t }

мой JSON класс операция

public class JsonOperations { 
 
\t String match_id, pool_name, team1_name, team1_image, team2_name, 
 
\t \t \t team2_image, match_date, match_country, match_venue, predicted; 
 

 
\t public JsonOperations() { 
 
\t \t 
 
\t } 
 

 
\t public JsonOperations(String match_id, String pool_name, String team1_name, 
 
\t \t \t String team1_image, String team2_name, String team2_image, 
 
\t \t \t String match_date, String match_country, String match_venue, 
 
\t \t \t String predicted) { 
 

 
\t \t this.match_id = match_id; 
 
\t \t this.pool_name = pool_name; 
 
\t \t this.team1_name = team1_name; 
 
\t \t this.team1_image = team1_image; 
 
\t \t this.team2_name = team2_name; 
 
\t \t this.team2_image = team2_image; 
 
\t \t this.match_date = match_date; 
 
\t \t this.match_country = match_country; 
 
\t \t this.match_venue = match_venue; 
 
\t \t this.predicted = predicted; 
 

 
\t } 
 

 
\t public void set_team1(String team1_name) { 
 

 
\t \t this.team1_name = team1_name; 
 
\t } 
 

 
\t public void set_team2(String team2_name) { 
 

 
\t \t this.team2_name = team2_name; 
 
\t } 
 

 
\t public String get_team1() { 
 

 
\t \t return team1_name; 
 
\t } 
 

 
\t public String get_team2() { 
 

 
\t \t return team2_name; 
 
\t } 
 

 
\t @Override 
 
\t public String toString() { 
 
\t \t // TODO Auto-generated method stub 
 
\t \t return this.get_team1() + this.get_team2(); 
 
\t } 
 

 
}

Смежные вопросы