访问简单销售人员返回的内部有序词典



我正在使用simple-salesforce通过Python查询salesforce。我的查询返回以下格式的有序字典

OrderedDict([('totalSize', 1), ('done', True), ('records', [OrderedDict([('attributes', OrderedDict([('type', 'Case'), ('url', 'www.blah.com')])), ('Number', '6904'), ('Severity', 'P1'), ('Product__c', 'd231'), ('Status', 'Available'), ('Case_Comments__r', OrderedDict([('totalSize', 1), ('done', True), ('records', [OrderedDict([('attributes', OrderedDict([('type', 'Comment__c'), ('url', 'www.blah.com')])), ('CreatedDate', '2019-11-05T12:10:06.000+0000'), ('Text__c', 'dummy text'), ('Created_By_Name', 'TEST USER')])])]))])])])

我想提取特定数据,但在访问内部有序字典时遇到问题。例如,我可以通过执行以下操作来获取"数字"和"严重性">

list1 = [(record['Number'], record['Severity']) for record in data['records']]

但我还需要访问"Comment_c",我已经尝试了以下内容,但它失败了。

list1 = [(record['Number'], record['Severity'], record['Case_Comments__r']['records']['Text__c']) for record in data['records']]

它失败并显示"类型错误:列表索引必须是整数或切片,而不是 str">

如您所见,record['Case_Comments__r']['records']OrderedDict的列表:

('records', [OrderedDict(...), ...])

因此,不可能使用像record['Case_Comments__r']['records']['Text__c']这样的字符串来索引此列表 - 您需要遍历列表并从每个OrderedDict中提取数据:

..., record['Severity'], [comment['Text__c'] for comment in record['Case_Comments__r']['records']]

这是从simple-salesforce查询结果中解析 OrderedDict 的另一种方法,它允许您在要搜索的内容None时设置默认值。

def get_field_data_from_salesforce_object(sf_session, field, default="some_default"):
field_query = f"Select {field} FROM Case WHERE Id = 'some-id'"
field_data = sf_session.query(field_query)
for k, v in field_data.items():
if k == "records":
for item in v:
field_key = item.get(field)
if field_key is None:
if default is not None:
field_key = default
else:
field_key = "(Not provided)"
return field_key

最新更新