无需依赖指定键遍历嵌套JSON并拼接子对象值的技术需求
无依赖键的JSON遍历与嵌套值处理方案
核心思路
不用硬编码任何具体键名,全程遍历外层JSON的所有键值对:
- 对每个值尝试解析为内层JSON,成功则遍历所有子值拼接成字符串
- 解析失败则直接保留原始值
- 最后将处理后的键值对批量赋值给目标对象
代码实现(基于org.json库)
import org.json.JSONObject; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.lang.reflect.Method; public class JsonProcessor { public static void processAndAssign(String jsonInput, Object targetObj) throws Exception { // 存储处理后的键值对 Map<String, String> processedData = new HashMap<>(); // 解析外层JSON JSONObject outerObject = new JSONObject(jsonInput); Iterator<String> outerKeys = outerObject.keys(); // 遍历所有外层键 while (outerKeys.hasNext()) { String key = outerKeys.next(); String rawValue = outerObject.optString(key); try { // 尝试解析为内层JSON,判断是否是嵌套结构 JSONObject innerObject = new JSONObject(rawValue); StringBuilder valueBuilder = new StringBuilder(); Iterator<String> innerKeys = innerObject.keys(); // 遍历内层值并拼接 while (innerKeys.hasNext()) { String innerVal = innerObject.optString(innerKeys.next()); if (valueBuilder.length() > 0) { valueBuilder.append(","); // 可自定义分隔符,比如空格、分号 } valueBuilder.append(innerVal); } processedData.put(key, valueBuilder.toString()); } catch (Exception e) { // 不是有效JSON,直接保留原始值 processedData.put(key, rawValue); } } // 将处理后的数据赋值给目标对象(用反射适配任意字段) for (Map.Entry<String, String> entry : processedData.entrySet()) { String fieldName = entry.getKey(); String processedValue = entry.getValue(); // 拼接setter方法名(假设字段名和setter命名规范匹配:setAd002对应ad002) String setterName = "set" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1); Method setter = targetObj.getClass().getMethod(setterName, String.class); setter.invoke(targetObj, processedValue); } } }
关键细节说明
- 嵌套JSON判断:用
try-catch捕获解析异常是最稳妥的方式,避免因格式不规范的字符串导致程序崩溃 - 拼接规则:示例中用逗号分隔子值,可根据需求改成空格、换行符或其他分隔符
- 对象赋值:通过反射调用setter方法,无需硬编码字段名,完美适配数千个键的场景;如果目标对象用Map存储数据,直接赋值会更简单
内容的提问来源于stack exchange,提问作者user3812445
相关产品推荐
相关产品推荐

