前后端中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);
}
}
- 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);
// 处理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();
// 处理解析异常
}
}