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