使用GSON解析JSON数组

Edd*_*Edd 109 java arrays json gson

我有一个像这样的JSON文件:

[
    {
        "number": "3",
        "title": "hello_world",
    }, {
        "number": "2",
        "title": "hello_world",
    }
]
Run Code Online (Sandbox Code Playgroud)

在文件有根元素之前我会使用:

Wrapper w = gson.fromJson(JSONSTRING, Wrapper.class);
Run Code Online (Sandbox Code Playgroud)

代码,但我想不出如何编写Wrapper类,因为根元素是一个数组.

我尝试过使用:

Wrapper[] wrapper = gson.fromJson(jsonLine, Wrapper[].class);
Run Code Online (Sandbox Code Playgroud)

有:

public class Wrapper{

    String number;
    String title;

}
Run Code Online (Sandbox Code Playgroud)

但是没有运气.我怎么能用这种方法读这个?

PS我有这个工作使用:

JsonArray entries = (JsonArray) new JsonParser().parse(jsonLine);
String title = ((JsonObject)entries.get(0)).get("title");
Run Code Online (Sandbox Code Playgroud)

但我更愿意知道如何使用这两种方法(如果可能的话).

Psh*_*emo 107

问题是由数组中每个 JSON对象末尾的逗号引起的(在每个 JSON对象之后__CODE__).如果您将其删除并将数据更改为

{
    "number": "...",
    "title": ".." ,  //<- see that comma?
}
Run Code Online (Sandbox Code Playgroud)

__CODE__ 应该工作正常.


Nar*_*hai 39

Gson gson = new Gson();
Wrapper[] arr = gson.fromJson(str, Wrapper[].class);

class Wrapper{
    int number;
    String title;       
}
Run Code Online (Sandbox Code Playgroud)

似乎工作正常.但是,你的字符串中还有一个额外的逗号.

[
    { 
        "number" : "3",
        "title" : "hello_world"
    },
    { 
        "number" : "2",
        "title" : "hello_world"
    }
]
Run Code Online (Sandbox Code Playgroud)


小智 16

public static <T> List<T> toList(String json, Class<T> clazz) {
    if (null == json) {
        return null;
    }
    Gson gson = new Gson();
    return gson.fromJson(json, new TypeToken<T>(){}.getType());
}
Run Code Online (Sandbox Code Playgroud)

样品来电:

List<Specifications> objects = GsonUtils.toList(products, Specifications.class);
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,这是将我的对象转换为LinkedTreeMap的List而不是List of Specification对象(例如). (3认同)