2015-12-28 54 views
7

我必须格式化为以下JSON文件:阅读与GSON库中的JSON文件

[{ 
    '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