2015-12-28 5 views
7

У меня есть файл в формате JSON, отформатированный как:Почитаю JSon файл с библиотекой gson

[{ 
    'title': 'Java', 
    'authors': ['Auth', 'Name'] 
}, 
{ 
    'title': 'Java2', 
    'authors': ['Auth2', 'Name2'] 
}, 
{ 
    'title': 'Java3', 
    'authors': ['Auth3', 'Name3'] 
}] 

Так я попытался с помощью gson библиотеки для разбора файла, с помощью следующего кода:

JsonElement jelement = new JsonParser().parse(pathFile); 
     JsonObject jObject = jelement.getAsJsonObject(); 
     JsonArray jOb = jObject.getAsJsonArray(""); 
     final String[] jObTE = new String[jOb.size()]; 
     for (int k=0; k<jObTE.length; k++) { 
      final JsonElement jCT = jOb.get(k); 
      JsonObject jOTE = jCT.getAsJsonObject(); 
      JsonArray jContentTime = jOTE.getAsJsonArray("content_time"); 
      final String[] contentTime = new String[jContentTime.size()]; 
      for (int i=0; i<contentTime.length; i++) { 
       final JsonElement jsonCT = jContentTime.get(i); 
       JsonObject jObjectTE = jsonCT.getAsJsonObject(); 
       JsonArray jTE = jObjectTE.getAsJsonArray(""); 
       final String[] contentTimeTE = new String[jTE.size()]; 
       for (int j=0; j<contentTimeTE.length; j++) { 
        final JsonElement jsonCTTE = jTE.get(j); 
        contentTime[j] = jsonCTTE.getAsString(); 
       } 
      } 
     } 

Но, при этом, я нашел эту ошибку: java.lang.IllegalStateException: Not a JSON Object на второй строке.

+0

Мальчик, это было бы полезно узнать, что * строка * выбрала это исключение ... – azurefrog

+0

Я отредактировал вопрос. Ошибка во второй строке кода. – user2520969

+0

, решено ниже, кстати, вы видели это? http://stackoverflow.com/questions/17650419/unable-to-parse-json-array-using-gson – dklos

ответ

9

Вы пытаетесь разобрать массив на объект, и в этом случае вы потерпите неудачу, потому что структура верхнего уровня в вашем json является массивом.

Я хотел бы разобрать этот JSON в немного другом способе

1) Создайте несколько Model класса

public class Model { 
    private String title; 
    private List<String> authors; 
//getters ... 
} 

2) Разбирает ваш JSON (

public static final String JSON_PATH = "/Users/dawid/Workspace/Test/test.json"; 

Gson gson = new Gson(); 
BufferedReader br = new BufferedReader(new FileReader(JSON_PATH)); 
Type type = new TypeToken<List<Model>>(){}.getType(); 
List<Model> models = gson.fromJson(br, type); 

Ваш код неразборчивый, так я думаю, что решил вашу проблему

Второй способ:

BufferedReader br = new BufferedReader(new FileReader(JSON_PATH)); 
JsonParser parser = new JsonParser(); 
JsonArray array = parser.parse(br).getAsJsonArray(); 
+0

Спасибо, он правильно работает! – user2520969

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