我想使用Java反序列化JSON:
{
"Smith":{
"id":1,
"age": 20
},
"Carter":{
"id":2,
"age": 21
}
}
到这个类的对象列表:
class Person {
private Long id;
private Integer age;
private String name; //here I want to have eg. Smith
//getters and setters
}
怎么做?
答案 0 :(得分:0)
ObjectMapper map = new ObjectMapper();
String json ="your json here "
Person person = map.readValue(json, Person.class);
这是标准方法, 在你的情况下你的json看起来有点不同,所以你必须创建一个与你的JSON匹配的pojo类
答案 1 :(得分:0)
这将通过映射(在此特定情况下)例如:
Person myPerson = new ObjectMapper().readValue(YOURJSONHERE, Person.class);
映射器会将Person模型中指定的属性映射到JSON中的相应字段。如果您有任何问题,请尝试查看here
但是,JSON的结构方式表明它会映射到“Smith”或“Carter”类,因此使用映射器的正确格式为:
{
"Person":{
"name":"Smith",
"id": 1,
"age": 20
}
}
答案 2 :(得分:0)
使用gson非常简单:
Type type = new TypeToken<List<Person>>() {}.getType();
Gson gson = new GsonBuilder().create();
List<Person> person = gson.fromJson(yourJson, type);
答案 3 :(得分:0)
这是一个粗略的工作示例,没有遵循最佳实践,但如果你在其他地方使用杰克逊,你应该能够弄明白。您也可以注册一个自定义模块,如果它在其他地方以这种方式序列化,也可以使用相同的逻辑。
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
static class Person {
private Long id;
private Integer age;
private String name; //here I want to have eg. Smith
public Person() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", age=" + age + ", name=" + name + "]";
}
}
public static void main(String[] args) throws JsonProcessingException, IOException {
String json = "{ \n" +
" \"Smith\":{ \n" +
" \"id\":1,\n" +
" \"age\": 20\n" +
" },\n" +
" \"Carter\":{ \n" +
" \"id\":2,\n" +
" \"age\": 21\n" +
" }\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode nodes = mapper.readTree(json);
List<Person> people = new ArrayList<>();
nodes.fields().forEachRemaining(entry -> {
String name = entry.getKey();
Person person = mapper.convertValue(entry.getValue(), Person.class);
person.setName(name);
people.add(person);
});
for (Person person : people) {
System.out.println(person);
}
}
}
输出
Person [id=1, age=20, name=Smith]
Person [id=2, age=21, name=Carter]