Java 要列出的JSON<;T>;

Java 要列出的JSON<;T>;,java,json,list,Java,Json,List,我是新来的,有个问题,惊喜:D 我有一个JSON字符串,我想把它转换成一个列表 我的JSON字符串: { "results": [ { "uri": "http://xxxxxx", "downloadCount": 0, "lastDownloaded": "2017-04-10T16:12:47.438+02:00", "remoteDownloadCount": 0, "remoteLastDownlo

我是新来的,有个问题,惊喜:D

我有一个JSON字符串,我想把它转换成一个列表

我的JSON字符串:

{
"results": [
    {
        "uri": "http://xxxxxx",
        "downloadCount": 0,
        "lastDownloaded": "2017-04-10T16:12:47.438+02:00",
        "remoteDownloadCount": 0,
        "remoteLastDownloaded": "1970-01-01T01:00:00.000+01:00"
    },
    {
        "uri": "http://yyyyyyy",
        "downloadCount": 0,
        "lastDownloaded": "2017-04-10T16:12:47.560+02:00",
        "remoteDownloadCount": 0,
        "remoteLastDownloaded": "1970-01-01T01:00:00.000+01:00"
    },]}
如何在Java中转换它

编辑: 我的问题是“结果”的根元素。。。
工作正常。

首先,您需要创建一个与JSON中的模型匹配的Java模型对象,例如:

public class MyClass {
    private String uri;
    private int downloadCount;
    private ZonedDateTime lastDownloaded;
    private int remoteDownloadCount;
    private ZonedDateTime remoteLastDownloaded;

   (getters and setters)

}
然后,您可以使用类似Jackson()的JSON解析器,使用Jackson ObjectMapper类()将JSON解析为该对象的实例列表:


创建用于访问数据的类

class ListElement {
    public String uri;
    public int downloadCount;
    public String lastDownloaded;
    public int remoteDownloadCount;
    public String remoteLastDownloaded;
}
然后,解析json并获取列表并将其转换为列表

public static void main(String[] args) throws ParseException {
    Gson gson = new Gson();
    JsonElement list = new JsonParser().parse(json).getAsJsonObject().get("results");
    List<ListElement> listObj = gson.fromJson(list, new TypeToken<List<ListElement>>() {}.getType());
    System.out.println(listObj.size());
}
publicstaticvoidmain(字符串[]args)引发异常{
Gson Gson=新的Gson();
JsonElement list=new JsonParser().parse(json).getAsJsonObject().get(“结果”);
List listObj=gson.fromJson(List,new-TypeToken(){}.getType());
System.out.println(listObj.size());
}

请注意,我使用了字符串而不是ZoneDateTime。因为,它是JsonObject的字符串(括在引号之间)。

它无法转换为列表。JSON是一个带有字段
results
的对象,该字段保存一个results对象列表。在java中使用JSON数据的最简单方法是使用现有的优秀java库之一(如Jackson)来操作JSON数据。当您遇到问题时,请先用谷歌,然后再发布问题。正如@jtahlborn所说,有像杰克逊、格森这样的优秀图书馆。这对我很有用:
ObjectReader=objectMapper.reader(newtypereference(){}).withRootName(“results”);List-artifactList=objectReader.readValue(jsonString)我以前尝试过,但得到了以下错误:线程“main”com.fasterxml.jackson.databind.JsonMappingException中的异常:无法反序列化de.vsa.restest.artifact[]的实例[Source:java.io]处的START\u对象令牌。StringReader@351d0846第1行第1列]我认为您的JSON格式不正确。最后一个逗号不应该是there@JuliObjectMapper不会将字符串直接转换为ZoneDateTime。您可以将数据类型设置为
lastDownloaded
remoteLastDownloaded
的字符串,以避免出现
JsonMappingException
。请参考我的答案。
public static void main(String[] args) throws ParseException {
    Gson gson = new Gson();
    JsonElement list = new JsonParser().parse(json).getAsJsonObject().get("results");
    List<ListElement> listObj = gson.fromJson(list, new TypeToken<List<ListElement>>() {}.getType());
    System.out.println(listObj.size());
}