Nim*_*sky 5 javascript java json gson
这是我的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}
]
Run Code Online (Sandbox Code Playgroud)
我现在想把它放在一个集合中,理想上/理论上我想做:
List<Person> personList = new Gson().fromJson(json, Person.class);
Run Code Online (Sandbox Code Playgroud)
和personList.size()将= 5.然后我将遍历personList并执行我的相关操作.
但是,我的理解是我需要创建一个容器类,它本身包含人员列表?所以不是为了简洁而删除公共getter/setter,也可能是语法错误.
Class Person {
private integer id;
private String Data;
private Boolean dmlCrud ;
}
Run Code Online (Sandbox Code Playgroud)
我真的需要类似的东西吗?
Class container{
List<Person> personList;
static class Person {
private integer id;
private String Data;
private Boolean dmlCrud ;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,我需要改变javascript json是一些不同的东西吗?这似乎很有问题,因为我使用JSON.stringifier从javascript数组创建json字符串.
任何帮助感激不尽.
编辑
我使用的解决方案是添加
public List<Person> personList;
Run Code Online (Sandbox Code Playgroud)
到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}
]
}
Run Code Online (Sandbox Code Playgroud)
那么gson调用就可以了
Person person = new Gson().fromJson(json, Person.class);
Run Code Online (Sandbox Code Playgroud)
以及如此列表中访问的数据
List<Person> personList = person.getPersonList();
Run Code Online (Sandbox Code Playgroud)
编辑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}
]
Run Code Online (Sandbox Code Playgroud)
然后使用
Type listType = new TypeToken<List<SkillsGsonTO>>() {}.getType();
List<Person> personList = new Gson().fromJson(json,listType);
Person person1 = personList.get(0);
Run Code Online (Sandbox Code Playgroud)
使用原始类的位置
Class Person {
private integer id;
private String Data;
private Boolean dmlCrud ;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 Container 类,但这仅在您需要在人员列表上发送其他属性时才有意义。如果不是这种情况,您也可以转换为 java.util.List。我认为您需要将列表属性的“名称”指定为 JSON 字符串中的根元素。例如,如果您的域对象是 Person 对象列表,那么您的 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}
]}
Run Code Online (Sandbox Code Playgroud)
我的语法可能有点偏差,但它应该与此类似。总结一下:
在你的情况下,你可以保持 Person 类不变,gson 应该能够从我建议的 JSON 字符串为你创建列表人员。
来自 Gson API 文档:如果您要反序列化的对象是 ParameterizedType(即至少包含一个类型参数并且可能是一个数组),那么您必须使用 fromJson(String, Type) 方法。以下是反序列化 ParameterizedType 的示例:
Type listType = new TypeToken<List<String>>() {}.getType();
Gson gson = new Gson();
List<String> target2 = gson.fromJson(json, listType);
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下它将是:
Type listType = new TypeToken<List<Person>>() {}.getType();
List<Person> persons = new Gson().fromJson(json, listType);
Run Code Online (Sandbox Code Playgroud)
其中 json 显然是你的 json 字符串
| 归档时间: |
|
| 查看次数: |
1432 次 |
| 最近记录: |