You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Apex_JSON解析键名动态变化的JSON对象

解决Apex JSON动态键取值的问题

完全懂你的困扰!当JSON里的键是动态变化的时候,固定路径的apex_json.get_varchar2确实没法直接用,得换个思路——先拿到这些动态键的列表,再逐个去遍历取值。下面给你两种实用的解决方法:

方法一:用Apex_JSON的键列表遍历

如果已经在用Apex_JSON来解析JSON,你可以先获取CHANGED VALUES对象下的所有动态键,然后拼接路径去取值:

String jsonString = '{ "CHANGED VALUES":{ "FNAME":{ "old":"fname_old", "new":"fname_new" }, "LNAME":{ "old":"lname_old", "new":"lname_new" } } }';

// 先解析JSON
Apex_JSON.parse(jsonString);

// 获取"CHANGED VALUES"下的所有动态字段名
List<String> changedFieldNames = Apex_JSON.get_keys('CHANGED VALUES');

// 遍历每个动态字段
for(String fieldName : changedFieldNames) {
    // 拼接old和new的路径
    String oldValuePath = 'CHANGED VALUES.' + fieldName + '.old';
    String newValuePath = 'CHANGED VALUES.' + fieldName + '.new';
    
    // 获取对应的值
    String oldValue = Apex_JSON.get_varchar2(oldValuePath);
    String newValue = Apex_JSON.get_varchar2(newValuePath);
    
    // 这里可以根据需求做后续处理,比如记录日志或者更新数据
    System.debug('字段 ' + fieldName + ':旧值=' + oldValue + ',新值=' + newValue);
}

方法二:转成Map<String, Object>处理

这种方法更灵活,不需要依赖Apex_JSON的解析状态,直接把JSON转成无类型的Map,然后逐层遍历:

String jsonString = '{ "CHANGED VALUES":{ "FNAME":{ "old":"fname_old", "new":"fname_new" }, "LNAME":{ "old":"lname_old", "new":"lname_new" } } }';

// 将JSON字符串反序列化为无类型Map
Map<String, Object> rootMap = (Map<String, Object>)JSON.deserializeUntyped(jsonString);

// 获取"CHANGED VALUES"对应的子Map
Map<String, Object> changedValuesMap = (Map<String, Object>)rootMap.get('CHANGED VALUES');

// 遍历每个动态字段
for(String fieldName : changedValuesMap.keySet()) {
    // 获取当前字段的old/new值Map
    Map<String, Object> fieldChangeMap = (Map<String, Object>)changedValuesMap.get(fieldName);
    
    // 取出old和new值(注意类型转换,根据实际数据类型调整)
    String oldValue = (String)fieldChangeMap.get('old');
    String newValue = (String)fieldChangeMap.get('new');
    
    System.debug('字段 ' + fieldName + ':旧值=' + oldValue + ',新值=' + newValue);
}

注意事项

  • 如果old或new的值不是字符串(比如数字、日期),记得把类型转换改成对应的类型,比如(Integer)、(Date)等。
  • 可以根据你的业务场景选择合适的方法:如果已经在使用Apex_JSON做其他解析操作,方法一更顺手;如果需要更灵活的结构处理,方法二更合适。

内容的提问来源于stack exchange,提问作者user3167732

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:34:08