【问题标题】:Read a json file with gson library使用 gson 库读取 json 文件
【发布时间】:2015-12-28 00:56:43
【问题描述】:

我有一个格式如下的 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

【问题讨论】:

  • 男孩,知道 行引发了该异常肯定会有所帮助...
  • 我已经编辑了这个问题。错误在代码的第二行。
  • 解决了,顺便说一句,你看到了吗? stackoverflow.com/questions/17650419/…

标签: java json file gson


【解决方案1】:

您正在尝试将数组解析为对象,在这种情况下您会失败,因为您的 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多