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

发布于:2024-11-29 ⋅ 阅读:(25) ⋅ 点赞:(0)

       很多时候因为数据库中不想创建中间表去存一些数据,所以在一个实体表中用一个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();
        // 处理解析异常
    }
}