从InputStreamReader将Json转换为gson

时间:2017-10-06 11:56:25

标签: java json spring gson

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

}

不幸的是,此代码无效,我无法将用户添加到我的地图中。这有什么不对?

2 个答案:

答案 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;
}