很多时候因为数据库中不想创建中间表去存一些数据,所以在一个实体表中用一个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);}
}
- ObjectMapper: 这是Jackson库中的一个核心类,用于处理JSON数据的读写。
- parseJson: 该方法接收一个JSON字符串并将其解析为
JsonNode
对象,方便后续操作。 - 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);// 处理myObjectListString jsonList = JsonParserUtil.convertListToJson(myObjectList);// 使用jsonList} else {MyObject myObject = JsonParserUtil.parseJsonToObject(jsonField, MyObject.class);// 处理myObjectString jsonObject = JsonParserUtil.convertObjectToJson(myObject);// 使用jsonObject}} catch (JsonProcessingException e) {e.printStackTrace();// 处理解析异常}
}