欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot中Jackson用法詳解

 更新時間:2025年01月02日 15:55:59   作者:考慮考慮  
Springboot自帶默認json解析Jackson,可以在不引入其他json解析包情況下,解析json字段,下面我們就來聊聊Springboot中Jackson的用法吧

前言

Springboot自帶默認json解析Jackson,可以在不引入其他json解析包情況下,解析json字段

Jackson用法

本文使用的是jdk23Springboot3.4.x版本,如果是在非Springboot項目,就動態(tài)添加包

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.18.2</version>
</dependency>

將對象解析為json字符串

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.IOException;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;

    private String name;

    public static void main(String[] args) {
        User user = new User(1L, "aa");
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            String json = objectMapper.writeValueAsString(user);
            System.out.println(json);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

輸出結果為

將json解析為對象

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.IOException;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;

    private String name;

    public static void main(String[] args) {
        User user = new User(1L, "aa");
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            String json = objectMapper.writeValueAsString(user);
            System.out.println(json);
            User user1 = objectMapper.readValue(json, User.class);
            System.out.println(user1);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

將json文件轉換為json

user.json放置于resources文件夾下

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.File;
import java.io.IOException;
import java.util.Objects;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;

    private String name;

    public static void main(String[] args) {
        User user = new User(1L, "aa");
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            String json = objectMapper.writeValueAsString(user);
            System.out.println(json);
            File file = new File(Objects.requireNonNull(User.class.getClassLoader().getResource("user.json")).getFile());

            User user1 = objectMapper.readValue(file, User.class);
            System.out.println(user1);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

輸出結果為

將url轉換成json

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.IOException;
import java.net.URI;
import java.net.URL;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;

    private String name;

    public static void main(String[] args) {
        User user = new User(1L, "aa");
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            String json = objectMapper.writeValueAsString(user);
            System.out.println(json);
            URL url = URI.create("http://192.168.69.183:16023/user.json").toURL();

            User user2 = objectMapper.readValue(url, User.class);
            System.out.println(user2);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

備注: 搭建個nginx服務器環(huán)境,將user.json放入靜態(tài)資源映射下

jdk20版本以下的URL需要這么寫

URL url = new URL("http://192.168.69.183:16023/user.json");

這種jdk20以上過期了,轉換成

URL url = URI.create("http://192.168.69.183:16023/user.json").toURL();

字節(jié)轉換成json

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;

    private String name;

    public static void main(String[] args) {

        ObjectMapper objectMapper= new ObjectMapper();
       String json = """
               {"id":1,"name":"aa"}
               """;
        try {

            User user2 = objectMapper.readValue(json.getBytes(StandardCharsets.UTF_8), User.class);
            System.out.println(user2);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

輸出結果為

jdk17版本以下字符串需要這些寫

String json = "{\"id\":1,\"name\":\"aa\"}";

字符串轉義

json數(shù)組轉對象數(shù)組

package cn.com.ut.cloud.demoobjectmapepr.model;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.IOException;
import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;

    private String name;

    public static void main(String[] args) {

        ObjectMapper objectMapper = new ObjectMapper();
        List<User> userList = List.of(new User(1L, "aa"),
                new User(2L, "bb"));
        try {
            String json = objectMapper.writeValueAsString(userList);
            System.out.println(json);
            List<User> list = objectMapper.readValue(json, new TypeReference<>() {
            });
            System.out.println(list);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

輸出結果為

image.png

json轉Map

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.IOException;
import java.util.Map;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;

    private String name;

    public static void main(String[] args) {

        ObjectMapper objectMapper = new ObjectMapper();
        User user = new User(1L, "aa");
        try {
            String json = objectMapper.writeValueAsString(user);
            System.out.println(json);
            Map<String, Object> map = objectMapper.readValue(json,
                    new TypeReference<>() {
                    });
            System.out.println(map);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

輸出結果為

JsonNode使用

JsonNode可以將json中的字段取出來

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.IOException;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;

    private String name;

    public static void main(String[] args) {

        ObjectMapper objectMapper = new ObjectMapper();
        User user = new User(1L, "aa");
        try {
            String json = objectMapper.writeValueAsString(user);
            System.out.println(json);
            JsonNode jsonNode = objectMapper.readTree(json);

            System.out.println(jsonNode.get("id").asText());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

輸出結果為

String id = jsonNode.get("id").asText(); 
double id = jsonNode.get("id").asDouble();
int id = jsonNode.get("id").asInt(); 
long id = jsonNode.get("id").asLong();

動態(tài)添加json字段

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;

    private String name;

    public static void main(String[] args) {

        ObjectMapper objectMapper = new ObjectMapper();

        ObjectNode objectNode = objectMapper.createObjectNode();
        objectNode.put("id", "1");
        objectNode.put("name", "1");
        objectNode.put("age", "1");
        System.out.println(objectNode.toString());
    }
}

輸出結果為

總結

可以使用Springboot自身攜帶的Jackson包操作json,當然,現(xiàn)在還有很多優(yōu)秀的json解析包,根據(jù)自身擅長的做技術選型

以上就是Springboot中Jackson用法詳解的詳細內容,更多關于Springboot Jackson用法的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解Java數(shù)據(jù)結構和算法(有序數(shù)組和二分查找)

    詳解Java數(shù)據(jù)結構和算法(有序數(shù)組和二分查找)

    本篇文章主要介紹了詳解Java數(shù)據(jù)結構和算法(有序數(shù)組和二分查找),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • springboot使用Logback把日志輸出到控制臺或輸出到文件

    springboot使用Logback把日志輸出到控制臺或輸出到文件

    這篇文章給大家介紹springboot項目使用日志工具Logback把日志不僅輸出到控制臺,也可以輸出到文件的操作方法,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-10-10
  • java中的異步加載new Thread()方式

    java中的異步加載new Thread()方式

    這篇文章主要介紹了java中的異步加載new Thread()方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 如何創(chuàng)建SpringBoot項目

    如何創(chuàng)建SpringBoot項目

    這篇文章主要介紹了如何創(chuàng)建SpringBoot項目,幫助大家更好的學習和使用springboot框架,感興趣的朋友可以了解下
    2021-01-01
  • java Tapestry4.1.2入門說明教程

    java Tapestry4.1.2入門說明教程

    不必關心鏈接!不必關心請求(http request)到了哪里!不必關心響應(http response)要轉向哪里!Tapestry構建于底層的request-resonse模式,基于Servlet技術,抽象出面向組件開發(fā)的模型。Tapestry關心的是:頁面、組件、事件、對象、方法、屬性!
    2008-11-11
  • 解決Java中的java.io.IOException: Broken pipe問題

    解決Java中的java.io.IOException: Broken pipe問題

    這篇文章主要介紹了解決Java中 java.io.IOException: Broken pipe的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot+WebSocket實現(xiàn)即時通訊功能(Spring方式)

    SpringBoot+WebSocket實現(xiàn)即時通訊功能(Spring方式)

    今天給大家分享一個SpringBoot+WebSocket實現(xiàn)即時通訊功能(Spring方式),WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議,文章通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • SpringBoot中使用攔截器的配置詳解

    SpringBoot中使用攔截器的配置詳解

    這篇文章主要介紹了SpringBoot中使用攔截器的配置詳解,攔截器是?AOP?的一種實現(xiàn),專門攔截對動態(tài)資源的后臺請求,即攔截對控制層的請?求,使用場景比較多的是判斷用戶是否有權限請求后臺,需要的朋友可以參考下
    2024-01-01
  • Java中的Timer和TimerTask詳細解讀

    Java中的Timer和TimerTask詳細解讀

    這篇文章主要介紹了Java中的Timer和TimerTask詳細解讀,??Timer和TimerTask可以做為實現(xiàn)線程的第三種方式,前兩中方式分別是繼承自Thread類和實現(xiàn)Runnable接口,需要的朋友可以參考下
    2023-10-10
  • JUnit測試控制@Test執(zhí)行順序的三種方式小結

    JUnit測試控制@Test執(zhí)行順序的三種方式小結

    這篇文章主要介紹了JUnit測試控制@Test執(zhí)行順序的三種方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論