使用 Jackson 解析 JSON、ObjectMapper解析 JSON、ObjectMapper实现对象转json、Jackson 实现对象转json

工作中经常需要对象转json,json转对象来实现数据的接受或发送,下面是个人使用的工具类:

import com.fasterxml.jackson.annotation.JsonInclude;

import com.fasterxml.jackson.core.JsonEncoding;

import com.fasterxml.jackson.core.JsonFactory;

import com.fasterxml.jackson.core.JsonGenerator;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.DeserializationFeature;

import com.fasterxml.jackson.databind.MapperFeature;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.databind.SerializationFeature;

import com.fasterxml.jackson.databind.node.ObjectNode;

import com.wanmagroup.haikang.constants.Constants;

import org.springframework.http.*;

import org.springframework.web.client.RestTemplate;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Map;

public class JsonUtils {

public static String ctreteJsonString(String key, Object obj) {

try {

// 使用封装的 ObjectMapper 创建 JSON 对象

ObjectMapper objectMapper = createObjectMapper();

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

objectMapper.setDateFormat(dateFormat);

// 使用封装的 JSON 工厂创建 JSON 生成器

JsonFactory jsonFactory = createJsonFactory();

JsonGenerator jsonGenerator = jsonFactory.createGenerator(System.out, JsonEncoding.UTF8);

// 创建一个 JSON 对象节点

ObjectNode rootNode = createJsonNode(key, obj);

// 使用 JSON 生成器将 JSON 对象写入输出流

objectMapper.writeTree(jsonGenerator, rootNode);

// 完成后关闭生成器

jsonGenerator.close();

// 将 JSON 对象转换为字符串

String userInfoJson = objectMapper.writeValueAsString(rootNode);

System.out.println(userInfoJson);

return userInfoJson;

} catch (IOException e) {

// 处理异常,可以打印错误日志或者采取其他必要的操作

e.printStackTrace();

return null; // 或者返回适当的错误信息

}

}

public static ObjectMapper createObjectMapper() {

ObjectMapper objectMapper = new ObjectMapper();

// 如果需要排除空字段

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

// 如果需要排除空字段

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);

objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

return objectMapper;

}

public static ObjectMapper createObjectMapperAll() {

ObjectMapper objectMapper = new ObjectMapper();

// 如果需要排除空字段
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// 如果需要排除空字段
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
//configure() 方法忽略掉"无法识别"的字段
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 忽略值为默认值的属性
objectMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_DEFAULT);
// 接受不区分大小写的属性
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

return objectMapper;

}

// 封装 JSON 工厂配置的方法

public static JsonFactory createJsonFactory() {

JsonFactory jsonFactory = new JsonFactory();

jsonFactory.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);

jsonFactory.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, true);

return jsonFactory;

}

// 创建包含指定键的 JSON 对象节点

public static <T> ObjectNode createJsonNode(String key, T object) {

ObjectMapper objectMapper = createObjectMapper();

ObjectNode rootNode = objectMapper.createObjectNode();

rootNode.putPOJO(key, object);

return rootNode;

}

//map转spring,组成请求体拼接url即可发送

public static String jsonRequest(Map<String,Object>map){

ObjectMapper objectMapper =JsonUtils.createObjectMapper();

String jsonRequest = "";

try {

jsonRequest = objectMapper.writeValueAsString(map);

} catch (JsonProcessingException e) {

e.printStackTrace();

}

System.out.println(jsonRequest);

return jsonRequest;

}

}


相关推荐
进击的雷神4 小时前
前端路由动态渲染、JSON内嵌HTML清洗、展位信息数组化、分页参数固定化——尼日利亚展会爬虫四大技术难关攻克纪实
前端·爬虫·python·json
147API7 小时前
Claude JSON 稳定输出:Schema 校验与修复回路(Kotlin)
开发语言·kotlin·json·claude
jackletter7 小时前
在pgsql中封装一个json函数,让它完全模拟mysql中的json_set
数据库·mysql·json·pgsql·json_set
jimy19 小时前
字节流(XML、JSON、文件、网络、图像、加密…)必须用无符号语义unsigned char
xml·c语言·网络·json
qingcyb9 小时前
JsonNode获取json指定key对应value值
json
蒙塔基的钢蛋儿11 小时前
使用STM32CUEBEIDE/S32DS 开发时,生成compile_commands.json 方便VSCODE智能提示
vscode·stm32·单片机·json
qingcyb12 小时前
JacksonUtilTest
windows·json
l1t12 小时前
利用DuckDB 1.5的json和struct功能分析llama web-ui导出的对话json文件
前端·ui·json
猫头虎-前端技术12 小时前
这个项目需要Node 16,那个项目需要Node 18:如何解决多项目Node.js版本管理问题
前端·javascript·chrome·typescript·node.js·json·firefox
倔强的石头10613 小时前
融合数据库架构实践:关系型、JSON与全文检索的“一库多能”深度解析
json·全文检索·数据库架构·kingbase