Java 从InputStreamReader将Json转换为gson

Java 从InputStreamReader将Json转换为gson,java,json,spring,gson,Java,Json,Spring,Gson,我从URL获得了一个JSON,它看起来像:| {"total_users_count":1, "users":[ {"first_name":"jan", "email":"admin@localhost", "city":null, "position":"", "experience_years":"5 - 8",

我从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;

}
URLConnection URLConnection=url.openConnection();
setRequestProperty(“授权”、“基本”+authStringEnc);
InputStream is=urlConnection.getInputStream();
InputStreamReader isr=新的InputStreamReader(is);
System.out.println(is.toString());
System.out.println(isr.toString());
CandidateDTO CandidateDTO=new Gson().fromJson(isr,CandidateDTO.class);
//使用反序列化对象
System.out.println(候选用户总数);
System.out.println(候选名字);
System.out.println(candidateDTO.email);
System.out.println(候选城市);
系统输出打印LN(候选职位);
系统输出打印(有三年工作经验);
System.out.println(符合薪资期望的候选人);
私人班级参选{
int总用户数;
地图名;
字符串电子邮件;
字符串城市;
串位置;
整年工作经验;
整数工资期望值;
}

不幸的是,此代码不起作用,我无法将用户添加到地图中。这个怎么了

您的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与您发布的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;
}
用户是一个集合(对象数组),所以您需要创建这样的集合

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;
}
public类候选对象{
int总用户数;
列表用户=新建ArrayList();
//Set users=new HashSet();
}
公共类用户{
字符串名;
字符串电子邮件;
字符串城市;
串位置;
三年以上弦乐工作经验;
字符串期望值;
}
用户是一个集合(对象数组),因此您需要创建这样的集合

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;
}
public类候选对象{
int总用户数;
列表用户=新建ArrayList();
//Set users=new HashSet();
}
公共类用户{
字符串名;
字符串电子邮件;
字符串城市;
串位置;
三年以上弦乐工作经验;
字符串期望值;
}

users不是map而是array。我不熟悉GSON,但如果像Jackson那样工作,则需要将其指向“users”(即包含
列表的子字符串)的值,或者提供一个映射到外部json对象的pojo(其中有一个名为
users
的字段,具有适当的类型).users不是map而是array。我不熟悉GSON,但如果它像Jackson一样工作,则需要将其指向“users”的值(即包含
列表的子字符串),或者提供一个映射到外部json对象的pojo(其中有一个名为
users
的字段,具有适当的类型)。