亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號