如何从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
相关产品推荐
相关产品推荐

