需求:改originalJson中的json字符串的key,当key满足在configMapping中配置的key2情况的时候,把originalJson的key改成 configMapping中的value2。
上代码:
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
public class JsonKeyExtractor {
public static void main(String[] args) {
// 原始键值映射 key value
JSONObject originalJson = new JSONObject();
originalJson.put("accountStatuses1","accountStatuses_test");
originalJson.put("marketplaceId1","marketplaceId_test");
originalJson.put("performanceMetrics1","performanceMetrics_test");
// 要进行替换的键值映射 key2 value2
JSONObject configMapping = new JSONObject();
configMapping.put("accountStatuses1", "accountStatuses");
configMapping.put("marketplaceId1", "marketplaceId");
configMapping.put("performanceMetrics1", "performanceMetrics");
// 调用递归函数进行键替换
replaceKeys(originalJson, configMapping);
// 输出替换后的 JSON
System.out.println(originalJson.toString());
}
// 递归替换函数
private static void replaceKeys(JSONObject jsonObject, JSONObject keyMapping) {
for (String key:jsonObject.keySet()){
if (keyMapping.containsKey(key)) {
// 如果键需要替换,进行替换
String replacementKey = keyMapping.get(key).toString();
jsonObject.put(replacementKey, jsonObject.get(key));
jsonObject.remove(key);
replaceKeys(jsonObject, keyMapping);
//立刻return重跑,否则修改了json结构,下一轮for就报错。
return;
}
if (jsonObject.get(key) instanceof JSONObject) {
// 如果值是 JSONObject,递归调用
replaceKeys(jsonObject.getJSONObject(key), keyMapping);
} else if (jsonObject.get(key) instanceof JSONArray) {
// 如果值是 JSONArray,遍历数组中的元素
JSONArray jsonArray = jsonObject.getJSONArray(key);
for (int i = 0; i < jsonArray.size(); i++) {
if (jsonArray.get(i) instanceof JSONObject) {
// 如果数组元素是 JSONObject,递归调用
replaceKeys(jsonArray.getJSONObject(i), keyMapping);
}
}
}
}
}
}
输出:
{
"performanceMetrics":"performanceMetrics_test",
"accountStatuses":"accountStatuses_test",
"marketplaceId":"marketplaceId_test"
}
假设用的不是JSONObject而是Map,这个方法就不是这么好写了。
比如:文章来源:https://www.toymoban.com/news/detail-709504.html
package cn.net.cdsz.ccb.test;
import club.newepoch.utils.JsonUtils;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
public class JsonKeyReplacementDemo {
public static void main(String[] args) {
// 创建一个 JSON 对象
Map<String, Object> jsonObject = new HashMap<>();
jsonObject.put("name", "John");
jsonObject.put("age", "30");
// 创建一个键的映射关系
Map<String, String> keyMapping = new HashMap();
keyMapping.put("name", "fullName");
// 调用替换函数
replaceKeys(jsonObject, keyMapping);
// 打印替换后的 JSON 对象
System.out.println(JsonUtils.toJSONString(jsonObject));
}
public static void replaceKeys(Map<String, Object> jsonObject, Map<String, String> keyMapping) {
for (String key : new HashSet<>(jsonObject.keySet())) {
if (keyMapping.containsKey(key)) {
// 如果键需要替换,进行替换
String replacementKey = keyMapping.get(key);
jsonObject.put(replacementKey, jsonObject.get(key));
jsonObject.remove(key);
}
String value = jsonObject.get(key).toString();
if (value != null && value.startsWith("{")) {
// 如果值是 JSON 格式的字符串,解析为 Map
Map<String, Object> innerJsonData = parseJsonString(value);
replaceKeys(innerJsonData, keyMapping);
jsonObject.put(key, toJsonString(innerJsonData));
}
}
}
// 解析 JSON 字符串为 Map
private static Map<String, Object> parseJsonString(String jsonString) {
// 此处需要使用 JSON 解析库来实现解析过程
// 这里仅为示例,需要替换为实际的 JSON 解析方法
// 你可以使用其他 JSON 解析库来解析 JSON 字符串为 Map
return null;
}
// 将 Map 转换为 JSON 字符串
private static String toJsonString(Map<String, Object> jsonData) {
// 此处需要使用 JSON 序列化库来实现转换过程
// 这里仅为示例,需要替换为实际的 JSON 序列化方法
// 你可以使用其他 JSON 序列化库来将 Map 转换为 JSON 字符串
return null;
}
}
这样用Map是非常不方便的文章来源地址https://www.toymoban.com/news/detail-709504.html
到了这里,关于JSONObject 比 Map好使的地方的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!