[英]Gson and the argonauts - problem converting javascript array, to json string, to java pojo using gson. Trying to get my structures correct
这是我的json字符串,我在java中访问:
json =
[
{"id":"123456","Data":"skill2","dmlcrud":false},
{"id":"123456","Data":"skill3","dmlcrud":true},
{"id":"123456","Data":"skill14","dmlcrud":true},
{"id":"123321","Data":"skill1","dmlcrud":false},
{"id":"123321","Data":"skill14","dmlcrud":false}
]
我现在想把它放在一个集合中,理想上/理论上我想做:
List<Person> personList = new Gson().fromJson(json, Person.class);
和personList.size()将= 5.然后我将遍历personList并执行我的相关操作。
但是,我的理解是我需要创建一个容器类,它本身包含人员列表? 所以不是为了简洁而删除公共getter / setter,也可能是语法错误。
Class Person {
private integer id;
private String Data;
private Boolean dmlCrud ;
}
我真的需要类似的东西吗?
Class container{
List<Person> personList;
static class Person {
private integer id;
private String Data;
private Boolean dmlCrud ;
}
}
然而,我需要改变javascript json是一些不同的东西吗? 这似乎很有问题,因为我使用JSON.stringifier从javascript数组创建json字符串。
任何帮助感激不尽。
编辑
我使用的解决方案是添加
public List<Person> personList;
到person类并改变它的json对象
{ "personList" :
[
{"id":"123456","Data":"skill2","dmlcrud":false},
{"id":"123456","Data":"skill3","dmlcrud":true},
{"id":"123456","Data":"skill14","dmlcrud":true},
{"id":"123321","Data":"skill1","dmlcrud":false},
{"id":"123321","Data":"skill14","dmlcrud":false}
]
}
那么gson调用就可以了
Person person = new Gson().fromJson(json, Person.class);
以及如此列表中访问的数据
List<Person> personList = person.getPersonList();
编辑2
第二个更好的解决方案是使用这个json数组
[
{"id":"123456","Data":"skill2","dmlcrud":false},
{"id":"123456","Data":"skill3","dmlcrud":true},
{"id":"123456","Data":"skill14","dmlcrud":true},
{"id":"123321","Data":"skill1","dmlcrud":false},
{"id":"123321","Data":"skill14","dmlcrud":false}
]
然后使用
Type listType = new TypeToken<List<SkillsGsonTO>>() {}.getType();
List<Person> personList = new Gson().fromJson(json,listType);
Person person1 = personList.get(0);
使用原始类的位置
Class Person {
private integer id;
private String Data;
private Boolean dmlCrud ;
}
您可以使用Container类,但这仅在您需要在人员列表中提供其他属性时才有意义。 如果不是这种情况,您也可以转换为java.util.List。 我认为您需要将list属性的“name”指定为JSON字符串中的根元素。 因此,例如,如果您的域对象是Person对象的List,那么您的JSON根元素是:“persons”或“personList”。 所以你是JSON可能看起来像:
"persons" : {[
{"id":"123456","Data":"skill2","dmlcrud":false},
{"id":"123456","Data":"skill3","dmlcrud":true},
{"id":"123456","Data":"skill14","dmlcrud":true},
{"id":"123321","Data":"skill1","dmlcrud":false},
{"id":"123321","Data":"skill14","dmlcrud":false}
]}
我可能会对语法略微偏离,但它应该与此类似。 总结一下:
在你的情况下,你可以保持你的Person类不受影响,gson应该能够从我建议的JSON字符串为你创建List人员。
从Gson API文档:如果您反序列化的对象是ParameterizedType(即包含至少一个类型参数,可能是一个数组),那么您必须使用fromJson(String,Type)方法。 以下是Deserialing ParameterizedType的示例:
Type listType = new TypeToken<List<String>>() {}.getType();
Gson gson = new Gson();
List<String> target2 = gson.fromJson(json, listType);
所以在你的情况下它将是:
Type listType = new TypeToken<List<Person>>() {}.getType();
List<Person> persons = new Gson().fromJson(json, listType);
其中json显然是你的json字符串
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.