我得到了像
这样的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。请通过代码示例告诉我。
答案 0 :(得分:0)
我认为你需要使用java json api,你需要手动绑定它
答案 1 :(得分:0)
如果您使用gson,则可以使用TypeToken
将json字符串加载到自定义Foo
对象中。
List<Foo> objects = gson.fromJson(source, new TypeToken<List<Foo>>(){}.getType());
source
可以是String
或BufferedReader
。
答案 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");