猿问

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

如何将其转换为对象格式?

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 数据库中。


慕森王
浏览 165回答 4
4回答

吃鸡游戏

您拥有的链接的响应不是User,而是List<User>- 尝试反序列化。您的代码应该与此类似(我试图稍微美化一下):&nbsp; &nbsp; public List<User> exposeServices() {&nbsp; &nbsp; &nbsp; &nbsp; RestTemplate restTemplate= new RestTemplate();&nbsp; &nbsp; &nbsp; &nbsp; ResponseEntity<String> response= restTemplate.getForEntity("https://jsonplaceholder.typicode.com/posts", String.class);&nbsp; &nbsp; &nbsp; &nbsp; Gson gson = new Gson();&nbsp; &nbsp; &nbsp; &nbsp; return gson.fromJson(response.getBody(), List.class);&nbsp; &nbsp; }另外,如果您没有特定的使用理由Gson,我认为您可以这样做:&nbsp; &nbsp; public List<User> exposeServices() {&nbsp; &nbsp; &nbsp; &nbsp; RestTemplate restTemplate= new RestTemplate();&nbsp; &nbsp; &nbsp; &nbsp; return restTemplate.getForEntity("https://jsonplaceholder.typicode.com/posts", List.class).getBody();&nbsp; &nbsp; }如评论中所述,这对演员表有警告。

桃花长相依

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用于此的类型中来绕过它,用于向类型添加参数(列表是一种类型,它需要一个参数,在本例中为用户)。

小怪兽爱吃肉

您可以为此使用以下解决方案首先,您需要三个库“Jackson-Databind”、“jackson-annotations”、“jackson-core”,它们应该是同一版本。以下是示例代码String jsonString = "<The json user list you received>";&nbsp; &nbsp; &nbsp;ObjectMapper mapper = new ObjectMapper();&nbsp; &nbsp; List user =&nbsp; mapper.readValue(jsonString.getBytes(), List.class);&nbsp; &nbsp; Iterator it = user.iterator();&nbsp; &nbsp; List<User> userList = new ArrayList<>();&nbsp; &nbsp; while(it.hasNext())&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; User receivedUser = new User();&nbsp; &nbsp; &nbsp; &nbsp; LinkedHashMap receivedMap = (LinkedHashMap)it.next();&nbsp; &nbsp; &nbsp; &nbsp; receivedUser.setUserId((Integer)receivedMap.get("userId"));&nbsp; &nbsp; &nbsp; &nbsp; receivedUser.setId((Integer)receivedMap.get("id"));&nbsp; &nbsp; &nbsp; &nbsp; receivedUser.setTitle((String)receivedMap.get("title"));&nbsp; &nbsp; &nbsp; &nbsp; receivedUser.setBody((String)receivedMap.get("body"));&nbsp; &nbsp; &nbsp; &nbsp; userList.add(receivedUser);&nbsp; &nbsp; }我已经创建了用户类。最后 userList 将包含所有来的用户。

开心每一天1111

您的解决方案是使用数组而不是一个对象:User[]&nbsp;users&nbsp;=&nbsp;gson.fromJson(response,&nbsp;User[].class);
随时随地看视频慕课网APP

相关分类

Java
我要回答