我从URL获得了一个JSON,它看起来像:|
{"total_users_count":1,
"users":[
{"first_name":"jan",
"email":"admin@localhost",
"city":null,
"position":"",
"experience_years":"5 - 8",
"salary_expectations":"0 - 7300"}
// ,{ ... }
]
}
在此响应中将有更多用户。我的代码:
URLConnection urlConnection = url.openConnection();
urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
InputStream is = urlConnection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
System.out.println(is.toString());
System.out.println(isr.toString());
CandidateDTO candidateDTO = new Gson().fromJson(isr, CandidateDTO.class);
// using the deserialized object
System.out.println(candidateDTO.total_users_count);
System.out.println(candidateDTO.first_name);
System.out.println(candidateDTO.email);
System.out.println(candidateDTO.city);
System.out.println(candidateDTO.position);
System.out.println(candidateDTO.experience_years);
System.out.println(candidateDTO.salary_expectations);
private class CandidateDTO {
int total_users_count;
Map <String, String> first_name;
String email;
String city;
String position;
Integer experience_years;
Integer salary_expectations;
}
不幸的是,此代码无效,我无法将用户添加到我的地图中。这有什么不对?
答案 0 :(得分:2)
您的DTO与您发布的json文档不符。有些数据类型甚至是错误的。更像这样的东西应该有用。
private CandidatesDTO {
int total_users_count;
List<CandidateDTO> users;
}
private class CandidateDTO {
String first_name;
String email;
String city;
String position;
String experience_years;
String salary_expectations;
}
然后当你反序列化时,使用“候选人”DTO而不是个人:
CandidatesDTO candidates = new Gson().fromJson(isr, CandidatesDTO.class);
答案 1 :(得分:2)
users是一个集合(对象数组),因此您需要创建一个这样的集合。
public class CandidateDTO {
int total_users_count;
List<User> users = new ArrayList<User>();
//Set<User> users = new HashSet<User>();
}
public class User{
String first_name;
String email;
String city;
String position;
String experience_years;
String salary_expectations;
}