当前位置: 首页 > article >正文

前后端中Json数据的简单处理

       很多时候因为数据库中不想创建中间表去存一些数据,所以在一个实体表中用一个json字段去存储并处理这些数据。本人倾向在前端js部分直接处理json数据,后端只做存储,不做处理。

前端在获取表单的时候解析

    toEdit(row) {
      this.editForm = { ...row };
      this.$nextTick(() => {
        let checkedKeys = JSON.parse(this.yourForm.jsonField);;
        checkedKeys.forEach((v) => {
          this.$nextTick(() => {
            this.$refs.menu.setChecked(v, true, false);
          });
        });
      });

前端在提交表单的时候转换

    submitForm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          this.yourForm.jsonField = JSON.stringify(this.getMenuAllCheckedKeys());

如果实在想在后端处理,写个json工具类去处理。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.List;

public class JsonParserUtil {

    private static final ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 将JSON字符串解析为JsonNode对象
     *
     * @param jsonString 要解析的JSON字符串
     * @return JsonNode对象
     * @throws JsonProcessingException 如果解析失败
     */
    public static JsonNode parseJson(String jsonString) throws JsonProcessingException {
        return objectMapper.readTree(jsonString);
    }

    /**
     * 将JSON字符串解析为指定类型的对象
     *
     * @param jsonString 要解析的JSON字符串
     * @param valueType 目标类型
     * @param <T> 目标类型的泛型
     * @return 转换后的对象
     * @throws JsonProcessingException 如果转换失败
     */
    public static <T> T parseJsonToObject(String jsonString, Class<T> valueType) throws JsonProcessingException {
        JsonNode jsonNode = parseJson(jsonString);
        return objectMapper.treeToValue(jsonNode, valueType);
    }

    /**
     * 将JSON字符串解析为指定类型的列表
     *
     * @param jsonString 要解析的JSON字符串
     * @param valueType 目标类型
     * @param <T> 目标类型的泛型
     * @return 转换后的列表
     * @throws JsonProcessingException 如果转换失败
     */
    public static <T> List<T> parseJsonToList(String jsonString, Class<T> valueType) throws JsonProcessingException {
        JsonNode jsonNode = parseJson(jsonString);
        return objectMapper.convertValue(jsonNode, objectMapper.getTypeFactory().constructCollectionType(List.class, valueType));
    }

    /**
     * 将对象转换为JSON字符串
     *
     * @param object 要转换的对象
     * @return JSON字符串
     * @throws JsonProcessingException 如果转换失败
     */
    public static String convertObjectToJson(Object object) throws JsonProcessingException {
        return objectMapper.writeValueAsString(object);
    }

    /**
     * 将列表转换为JSON字符串
     *
     * @param list 要转换的列表
     * @return JSON字符串
     * @throws JsonProcessingException 如果转换失败
     */
    public static String convertListToJson(List<?> list) throws JsonProcessingException {
        return objectMapper.writeValueAsString(list);
    }
}
  1. ObjectMapper: 这是Jackson库中的一个核心类,用于处理JSON数据的读写。
  2. parseJson: 该方法接收一个JSON字符串并将其解析为JsonNode对象,方便后续操作。
  3. convertJsonNodeToObject: 该方法将JsonNode对象转换为指定类型的Java对象,使用泛型来支持不同类型的转换。

使用示例

import com.example.utils.JsonParserUtil;
import com.fasterxml.jackson.core.JsonProcessingException;

public void processJsonField(String jsonField, boolean isList) {
    try {
        if (isList) {
            List<MyObject> myObjectList = JsonParserUtil.parseJsonToList(jsonField, MyObject.class);
            // 处理myObjectList
            String jsonList = JsonParserUtil.convertListToJson(myObjectList);
            // 使用jsonList
        } else {
            MyObject myObject = JsonParserUtil.parseJsonToObject(jsonField, MyObject.class);
            // 处理myObject
            String jsonObject = JsonParserUtil.convertObjectToJson(myObject);
            // 使用jsonObject
        }
    } catch (JsonProcessingException e) {
        e.printStackTrace();
        // 处理解析异常
    }
}


http://www.kler.cn/a/412360.html

相关文章:

  • SQL for XML
  • Spring Boot 动态数据源切换
  • 英伟达推出了全新的小型语言模型家族——Hymba 1.5B
  • day04 企业级Linux安装及远程连接知识实践
  • 一个专为云原生环境设计的高性能分布式文件系统
  • MacOS系统上Jmeter 录制脚本遇到的证书坑位
  • Javaweb 前端 HTML css 案例 总结
  • 开发一个基于MACOS M1/2芯片的Android 12的模拟器
  • 基于STM32的智能风扇控制系统
  • digit_eye开发记录(2): Python读取MNIST数据集
  • 渗透测试笔记—window基础
  • 蓝桥杯每日真题 - 第24天
  • 27加餐篇:gRPC框架的优势与不足之处
  • Apache Zeppelin:一个基于Web的大数据可视化分析平台
  • 前端 设置 div 标签内子多个子 div 内容,在一行展示,并且可以字段自动换行
  • Flink 实现超速监控:从 Kafka 读取卡口数据写入 MySQL
  • 浏览器开发工具
  • java——SpringBoot中常用注解及其底层原理
  • SSM之AOP与事务
  • 缓存雪崩、击穿、穿透深度解析与实战应对
  • 使用OpenCV实现视频背景减除与目标检测
  • 【QT】背景,安装和介绍
  • 【云计算网络安全】解析 Amazon 安全服务:构建纵深防御设计最佳实践
  • docker-compose文件的简介及使用
  • Git 使用技巧
  • 鸿蒙开发异步与线程