用java语言实现多维度json自定义参数转换功能,
每个参数都可以自定义转换规则,
并且json对象的深度不受限制。
json示例:
{
"name": "Json",
"age": 18,
"address": {
"city": "beijing",
"street": {
"name": "xinyuan street",
"number": "1"
}
}
}
转换函数:
public static Map<String, String> convertJson(String json, List<Map<String, String>> rules) {
Map<String, String> resultMap = new HashMap<>();
// 解析json
JSONObject jsonObject = JSONObject.parseObject(json);
// 遍历转换规则
for (Map<String, String> rule : rules) {
String key = rule.get("key");
String value = rule.get("value");
// 获取key对应的json字段
Object targetValue = getJsonFieldValue(jsonObject, key);
// 将value转换为目标值
String resultValue = convertValue(value, targetValue);
// 将处理结果添加到resultMap中
resultMap.put(key, resultValue);
}
return resultMap;
}
获取json字段值函数:
public static Object getJsonFieldValue(JSONObject jsonObject, String key) {
String[] keys = key.split("\\.");
Object resultValue = jsonObject;
for (String k : keys) {
resultValue = ((JSONObject) resultValue).get(k);
}
return resultValue;
}
根据value转换为目标值:
public static String convertValue(String value, Object targetValue) {
if (value.equals("$target")) {
return targetValue.toString();
} else if (value.contains("$target")) {
return value.replace("$target", targetValue.toString());
} else {
return value;
}
}