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

如何从JSON字符串中获取指定值?附Salesforce代码及调试数据

如何从给定的JSON字符串中获取指定值?

嘿,我来帮你搞定这个问题!从你提供的代码和调试JSON来看,这是Salesforce Apex环境下的场景对吧?下面给你几种实用的方法,还能帮你优化现有代码哦~

方法1:直接反序列化成SObject列表(类型安全首选)

既然你的JSON是Work_Team_Member__c对象列表序列化来的,直接反序列化回原类型是最稳妥的,编译器会帮你检查字段名,避免出错:

// 你的原始JSON字符串
String JSONString = '[{"attributes":{"type":"Work_Team_Member__c","url":"/services/data/v42.0/sobjects/Work_Team_Member__c/a81W00000008gIsIAI"},"Id":"a81W00000008gIsIAI","Member_Employee_ID__c":"63","Member_Name__c":"Test1","Member_Role__c":"Account Representative – General (Secondary)","Work_Team_Master__c":"a80W00000009DodIAE"}]';

// 反序列化为Work_Team_Member__c列表
List<Work_Team_Member__c> memberList = (List<Work_Team_Member__c>)JSON.deserialize(JSONString, List<Work_Team_Member__c>.class);

// 提取指定值,比如第一个成员的姓名和员工ID
if (!memberList.isEmpty()) {
    String targetName = memberList[0].Member_Name__c;
    String targetEmpId = memberList[0].Member_Employee_ID__c;
    
    System.debug('提取到的成员姓名:' + targetName);
    System.debug('提取到的员工ID:' + targetEmpId);
}

方法2:用JSON.deserializeUntyped灵活解析(适合不确定字段的场景)

如果你的JSON结构可能变动,或者不想依赖SObject类型,可以用无类型反序列化,得到Map列表后按需取值:

// 同样用你的JSON字符串
String JSONString = '[{"attributes":{"type":"Work_Team_Member__c","url":"/services/data/v42.0/sobjects/Work_Team_Member__c/a81W00000008gIsIAI"},"Id":"a81W00000008gIsIAI","Member_Employee_ID__c":"63","Member_Name__c":"Test1","Member_Role__c":"Account Representative – General (Secondary)","Work_Team_Master__c":"a80W00000009DodIAE"}]';

// 反序列化为Map列表
List<Map<String, Object>> memberMaps = (List<Map<String, Object>>)JSON.deserializeUntyped(JSONString);

for (Map<String, Object> member : memberMaps) {
    // 提取指定字段,注意手动类型转换
    String targetRole = (String)member.get('Member_Role__c');
    String targetTeamId = (String)member.get('Work_Team_Master__c');
    
    System.debug('提取到的成员角色:' + targetRole);
    System.debug('提取到的工作组ID:' + targetTeamId);
}

额外优化:跳过序列化反序列化的冗余步骤

看你的原始代码,你已经从memberMap.get(Rz.Roles__c)得到了list ls,其实完全可以直接把这个list转换成Work_Team_Member__c列表,不需要先序列化再反序列化,节省性能:

// 直接转换原始list,避免序列化反序列化
List<Work_Team_Member__c> memberList = (List<Work_Team_Member__c>)memberMap.get(Rz.Roles__c);

if (!memberList.isEmpty()) {
    String desiredValue = memberList[0].Member_Name__c;
    // 后续操作...
}

调试用JSON参考:

[{"attributes":{"type":"Work_Team_Member__c","url":"/services/data/v42.0/sobjects/Work_Team_Member__c/a81W00000008gIsIAI"},"Id":"a81W00000008gIsIAI","Member_Employee_ID__c":"63","Member_Name__c":"Test1","Member_Role__c":"Account Representative – General (Secondary)","Work_Team_Master__c":"a80W00000009DodIAE"}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:59:29