简体   繁体   English

使用 GSON JsonReader 读取一个简单的 JSON 文件

[英]Read a simple JSON file with GSON JsonReader

I thought this would be simple but it keeps crashing with InvocationTargetException at reader.hasNext() .我认为这很简单,但它不断在reader.hasNext()reader.hasNext() InvocationTargetException崩溃。

    File jsonInputFile = new File(root + "/dicts/phrases.json");
    JsonReader reader = new JsonReader(new FileReader(jsonInputFile));
    while (reader.hasNext()) {
        System.out.println(reader.nextName());
    }

What exactly is wrong with this?这究竟有什么问题? The while loop just goes on forever despite the json file only have one line.尽管 json 文件只有一行,但 while 循环会一直持续下去。

Since it seems to be reading the JSON and it is encountering a BEGIN_TOKEN rather than JsonToken.NAME type由于它似乎正在读取 JSON 并且遇到 BEGIN_TOKEN 而不是 JsonToken.NAME 类型

Could you try the below:你可以试试下面的:

           while (jsonReader.hasNext()) 
            {
                JsonToken nextToken = jsonReader.peek();
                 
                if (JsonToken.BEGIN_OBJECT.equals(nextToken)) {
 
                    jsonReader.beginObject();
 
                } else if (JsonToken.NAME.equals(nextToken)) {
 
                    String name = jsonReader.nextName();
                    System.out.println("Token KEY >>>> " + name);
 
                } else if (JsonToken.STRING.equals(nextToken)) {
 
                    String value = jsonReader.nextString();
                    System.out.println("Token Value >>>> " + value);
 
                } else if (JsonToken.NUMBER.equals(nextToken)) {
 
                    long value = jsonReader.nextLong();
                    System.out.println("Token Value >>>> " + value);
 
                } else if (JsonToken.NULL.equals(nextToken)) {
 
                    jsonReader.nextNull();
                    System.out.println("Token Value >>>> null");
                     
                } else if (JsonToken.END_OBJECT.equals(nextToken)) {
 
                    jsonReader.endObject();
 
                }
            }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM