为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Java 中将 JSON 转换为对象格式?

如何在 Java 中将 JSON 转换为对象格式?

慕森王 2023-05-17 17:01:11
如何将其转换为对象格式?public String ExposeServices() {        RestTemplate restTemplate= new RestTemplate();        String forresouseURL="https://jsonplaceholder.typicode.com/posts";        ResponseEntity<String> response= restTemplate.getForEntity(forresouseURL, String.class);        Gson gson = new Gson(); // Or use new GsonBuilder().create();        String target2 = gson.toJson(response, User.class);        HashMap<String, String> jsonObject= response;        System.out.println(target2);        //response.getBody().        return target2;     }这是我尝试过的,但它没有返回任何值。我必须以对象格式获取 JOSN 值,然后必须插入到 MySQL 数据库中。
查看完整描述

4 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您拥有的链接的响应不是User,而是List<User>- 尝试反序列化。


您的代码应该与此类似(我试图稍微美化一下):


    public List<User> exposeServices() {

        RestTemplate restTemplate= new RestTemplate();

        ResponseEntity<String> response= restTemplate.getForEntity("https://jsonplaceholder.typicode.com/posts", String.class);

        Gson gson = new Gson();

        return gson.fromJson(response.getBody(), List.class);

    }

另外,如果您没有特定的使用理由Gson,我认为您可以这样做:


    public List<User> exposeServices() {

        RestTemplate restTemplate= new RestTemplate();

        return restTemplate.getForEntity("https://jsonplaceholder.typicode.com/posts", List.class).getBody();

    }

如评论中所述,这对演员表有警告。


查看完整回答
反对 回复 2023-05-17
?
桃花长相依

TA贡献1860条经验 获得超8个赞

Jackson 是一个 JSON 序列化器/反序列化器,默认包含在 spring 中并被RestTemplate默认使用。


端点返回的是用户列表,因此您不能将其User直接反序列化为 a,它必须是 a 类型List<User>。


public List<User> exposeServices() {

    RestTemplate restTemplate= new RestTemplate();

    return restTemplate.exchange("https://jsonplaceholder.typicode.com/posts", 

        HttpMethod.GET, 

        null,   

        new ParameterizedTypeReference<List<User>>() {})

        .getBody();

}

如果你只是传入List.class它RestTemplate,它将不知道你希望你的列表包含什么,你可能会从编译器那里得到一个警告。


我们可以通过将 our 包装List<User>到一个ParameterizedTypeReference用于此的类型中来绕过它,用于向类型添加参数(列表是一种类型,它需要一个参数,在本例中为用户)。

查看完整回答
反对 回复 2023-05-17
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

您可以为此使用以下解决方案


首先,您需要三个库“Jackson-Databind”、“jackson-annotations”、“jackson-core”,它们应该是同一版本。以下是示例代码


String jsonString = "<The json user list you received>";

     ObjectMapper mapper = new ObjectMapper();


    List user =  mapper.readValue(jsonString.getBytes(), List.class);


    Iterator it = user.iterator();


    List<User> userList = new ArrayList<>();


    while(it.hasNext())

    {

        User receivedUser = new User();

        LinkedHashMap receivedMap = (LinkedHashMap)it.next();

        receivedUser.setUserId((Integer)receivedMap.get("userId"));

        receivedUser.setId((Integer)receivedMap.get("id"));

        receivedUser.setTitle((String)receivedMap.get("title"));

        receivedUser.setBody((String)receivedMap.get("body"));

        userList.add(receivedUser);

    }

我已经创建了用户类。最后 userList 将包含所有来的用户。


查看完整回答
反对 回复 2023-05-17
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

您的解决方案是使用数组而不是一个对象:

User[] users = gson.fromJson(response, User[].class);


查看完整回答
反对 回复 2023-05-17
  • 4 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信