JSON到Java集合

时间:2017-05-23 05:05:22

标签: java json jackson gson

我得到了像

这样的JSON
{
"items":[
{
"id":15
,"name":"abc"
}
,{
"id":16
,"name":"xyz%"
}
,{
"id":17
,"name":"qwerty"
}
,{
"id":18
,"name":"rudloph"
}
,{
"id":19
,"name":"jane"
}
,{
"id":20
,"name":"doe"
}
]
}

我的课程就像:

public class Foo {
    public String id;    
    public String name;
}

我想将此JSON转换为List<Foo>。我怎样才能做到这一点?现在我正在做:

List<Foo> fooList = new ArrayList<>();
JSONObject jsonObject = new JSONObject(json);
JSONArray araray = jsonObject.getJSONArray("items");
for(int i =0 ; i < araray.length();i++){
    Foo dto = new Foo();
    dto.setId(Long.valueOf((String) araray.getJSONObject(i).get("id")));
    dto.setName((String) araray.getJSONObject(i).get("name"));
    fooList.add(dto);
}

PS:无法更改JSON。杰克逊或者Gson。请通过代码示例告诉我。

4 个答案:

答案 0 :(得分:0)

我认为你需要使用java json api,你需要手动绑定它

答案 1 :(得分:0)

如果您使用gson,则可以使用TypeToken将json字符串加载到自定义Foo对象中。

List<Foo> objects = gson.fromJson(source, new TypeToken<List<Foo>>(){}.getType());

source可以是StringBufferedReader

答案 2 :(得分:0)

您使用的是JSON字符串的错误模型。实际上Foo的列表在另一个模型中。只需编写另一个类

public class Item {

    List<Foo> items;

    public Item() {
    }

   // getter setter
}

现在您可以像这样使用com.fasterxml.jackson.databind.ObjectMapper

ObjectMapper mapper = new ObjectMapper();
Item item = mapper.readValue(json, Item.class);

for(Foo foo : item.getItems()) {
            ...
}

答案 3 :(得分:0)

尝试使用GSON。

Gson gson = new Gson();
Map<String, List<Foo>> objects = gson.fromJson(source,
    new TypeToken<Map<String, List<Foo>>>(){}.getType());
List<Foo> list = objects.get("items");