Java 使用GSON解析JSON数组

Java 使用GSON解析JSON数组,java,arrays,json,parsing,gson,Java,Arrays,Json,Parsing,Gson,我有一个基本的JSON,所有数据都包含在一个数组中。有人会认为从数组中检索一个值很简单,但在尝试了几个小时的各种不同的解析方法后,我想我完全迷路了。任何帮助都将不胜感激。对不起,这个问题的措辞太糟糕了 我知道我曾尝试使用JsonReader作为对象读取JSON,然后解析ID字段。这将是我的最新尝试,其他尝试的代码已经被删除,我恐怕不能提供更多关于上述尝试的信息 JsonReader reader = new JsonReader(new FileReader(Constants.VersJson

我有一个基本的JSON,所有数据都包含在一个数组中。有人会认为从数组中检索一个值很简单,但在尝试了几个小时的各种不同的解析方法后,我想我完全迷路了。任何帮助都将不胜感激。对不起,这个问题的措辞太糟糕了

我知道我曾尝试使用JsonReader作为对象读取JSON,然后解析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"

您在此处发布的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 + "]";
    }
}

我还遇到了使用gson进行json数组解析的问题,我的代码解决了这个问题

这是我的reader类函数

JsonReader reader=新的JsonReadernew InputStreamReadernew文件InputStreamMyFile; System.out.println读取器; Gson Gson=新Gson; JsonParser=新的JsonParser; JsonArray jArray=parser.parsereader.getAsJsonArray; ArrayList lcs=新的ArrayList; ForjSoneElement对象:jArray { JsonOperations cse=gson.fromJson obj,JsonOperations.class; lcs.addcse; } 对于JsonOperations tUser:lcs { System.out.printlntUser;
}你试了什么?你认为它为什么会起作用?为什么不呢?在检查名称之前,您必须先开始一个对象。当我在检查名称之前开始数组时,它会抛出一个IllegalStateException:应为begin_数组,但名称位于第2行第4列。如果您的JSON类似于{versions:[{…}]},则您有一个JSON对象,它包含一个JSON数组,其中包含许多JSON对象。好吧,我明白你现在说的,我不知道为什么我自己没有意识到这一点。谢谢你,先生。是否有理由为这些类实现setter和getter?对于我正在开发的程序,我看不出它们有什么用处。你能解释一下什么时候需要吗?@AvP实际上gson是基于字段的,因为它使用了反射,在这个例子中,字段是私有的,不能被类外的人访问,这就是为什么getter/setter。如果您有公共实例属性,那么就不需要setter/getter,但是将它们公开并不好。更多详情请参见gson文件。
JsonReader reader = new JsonReader(new FileReader(Constants.VersJson));
Gson gson = new Gson();
Version version = gson.fromJson(reader, Version.class);