"Cannot deserialize instance of string from START_ARRAY value" Salesforce API 问题
"Cannot deserialize instance of string from START_ARRAY value" Salesforce API issue
正在尝试使用 .xlsx sheet 中的值创建 SF 联系人。
如果我手动输入虚假的电子邮件地址、姓氏和名字但无法将其引用到我从 xlsx sheet 定义的值,我可以创建联系人。
打印命令工作正常并读取我希望它们读取的适当数据。
现在只做了 Python 2 周,并且已经能够读取、写入和保存数据 to/from MySQLdb 没有问题,但现在 运行 遇到这个问题并且没有找到很多关于这方面的信息,特别是 SalesForce。任何帮助将不胜感激。
所以完整的错误是:
文件 "C:\Python27\lib\site-packages\simple_salesforce-0.70-py2.7.egg\simple_salesforce\api.py",第 749 行,在 _exception_handler
提高 exc_cls(result.url, result.status_code, 名称, response_content)
simple_salesforce.api.SalesforceMalformedRequest:请求格式错误 https://na48.salesforce.com/services/data/v37.0/sobjects/Contact/。响应内容:[{u'errorCode': u'JSON_PARSER_ERROR', u'message': u'Cannot deserialize instance of string from START_ARRAY value [line:1, column:2]' }]
Email = sheet.col_values(1, 1)
Last = sheet.col_values(2, 1)
First = sheet.col_values(3, 1)
print Email
print Last
print First
sf.Contact.create({'LastName' : Last,'FirstName' : First,'Email' : Email})
好的,错误已修复,但它只会在 salesforce 上创建一个 contact/case,这是 xlsx 中的最后一行 sheet,而不是为 xlsx 中的每一行创建一个 contact/case .它在很大程度上正确地读取了所有内容,并且实际上确实以正确的方式创建了联系人,但只是最后一行。
当前代码:
for c in range(sheet.ncols):
for r in range(sheet.nrows):
Email = sheet.col_values(1,r)[0]
print Email
Last = sheet.col_values(2,r)[0]
print Last
First = sheet.col_values(3,r)[0]
print First
Phone = sheet.col_values(4,r)[0]
print Phone
Street = sheet.col_values(5,r)[0]
print Street
City = sheet.col_values(6,r)[0]
print City
Postal = sheet.col_values(7,r)[0]
print Postal
Product = sheet.col_values(8,r)[0]
print Product
Store = sheet.col_values(9,r)[0]
print Store
SN = sheet.col_values(10,r)[0]
print SN
Name = sheet.col_values(3,r)[0]+sheet.col_values(2,r)[0]
sf.Contact.create({'FirstName' : First, 'LastName' : Last, 'Email' : Email, 'Phone' : Phone, 'MailingStreet' : Street, 'MailingCity' : City, 'MailingPostalCode' : Postal})
来自服务器的错误消息说
Cannot deserialize instance of string from START_ARRAY value [line:1,
column:2]
意味着服务器期望字段值是一个字符串,但请求有一个数组。
因此猜测 sheet.col_values() returns 是一个数组,你想把它改成
Email = sheet.col_values(1, 1)[0]
Last = sheet.col_values(2, 1)[0]
First = sheet.col_values(3, 1)[0]
第二期更新:
缩进在 python 中很重要,您的创建调用只发生一次,因为它在循环之外,您需要将其移动到循环内,例如
for c in range(sheet.ncols):
for r in range(sheet.nrows):
Email = sheet.col_values(1,r)[0]
print Email
Last = sheet.col_values(2,r)[0]
print Last
First = sheet.col_values(3,r)[0]
print First
Phone = sheet.col_values(4,r)[0]
print Phone
Street = sheet.col_values(5,r)[0]
print Street
City = sheet.col_values(6,r)[0]
print City
Postal = sheet.col_values(7,r)[0]
print Postal
Product = sheet.col_values(8,r)[0]
print Product
Store = sheet.col_values(9,r)[0]
print Store
SN = sheet.col_values(10,r)[0]
print SN
Name = sheet.col_values(3,r)[0]+sheet.col_values(2,r)[0]
sf.Contact.create({'FirstName' : First, 'LastName' : Last, 'Email' : Email, 'Phone' : Phone, 'MailingStreet' : Street, 'MailingCity' : City, 'MailingPostalCode' : Postal})
正在尝试使用 .xlsx sheet 中的值创建 SF 联系人。
如果我手动输入虚假的电子邮件地址、姓氏和名字但无法将其引用到我从 xlsx sheet 定义的值,我可以创建联系人。 打印命令工作正常并读取我希望它们读取的适当数据。
现在只做了 Python 2 周,并且已经能够读取、写入和保存数据 to/from MySQLdb 没有问题,但现在 运行 遇到这个问题并且没有找到很多关于这方面的信息,特别是 SalesForce。任何帮助将不胜感激。
所以完整的错误是:
文件 "C:\Python27\lib\site-packages\simple_salesforce-0.70-py2.7.egg\simple_salesforce\api.py",第 749 行,在 _exception_handler 提高 exc_cls(result.url, result.status_code, 名称, response_content) simple_salesforce.api.SalesforceMalformedRequest:请求格式错误 https://na48.salesforce.com/services/data/v37.0/sobjects/Contact/。响应内容:[{u'errorCode': u'JSON_PARSER_ERROR', u'message': u'Cannot deserialize instance of string from START_ARRAY value [line:1, column:2]' }]
Email = sheet.col_values(1, 1)
Last = sheet.col_values(2, 1)
First = sheet.col_values(3, 1)
print Email
print Last
print First
sf.Contact.create({'LastName' : Last,'FirstName' : First,'Email' : Email})
好的,错误已修复,但它只会在 salesforce 上创建一个 contact/case,这是 xlsx 中的最后一行 sheet,而不是为 xlsx 中的每一行创建一个 contact/case .它在很大程度上正确地读取了所有内容,并且实际上确实以正确的方式创建了联系人,但只是最后一行。
当前代码:
for c in range(sheet.ncols):
for r in range(sheet.nrows):
Email = sheet.col_values(1,r)[0]
print Email
Last = sheet.col_values(2,r)[0]
print Last
First = sheet.col_values(3,r)[0]
print First
Phone = sheet.col_values(4,r)[0]
print Phone
Street = sheet.col_values(5,r)[0]
print Street
City = sheet.col_values(6,r)[0]
print City
Postal = sheet.col_values(7,r)[0]
print Postal
Product = sheet.col_values(8,r)[0]
print Product
Store = sheet.col_values(9,r)[0]
print Store
SN = sheet.col_values(10,r)[0]
print SN
Name = sheet.col_values(3,r)[0]+sheet.col_values(2,r)[0]
sf.Contact.create({'FirstName' : First, 'LastName' : Last, 'Email' : Email, 'Phone' : Phone, 'MailingStreet' : Street, 'MailingCity' : City, 'MailingPostalCode' : Postal})
来自服务器的错误消息说
Cannot deserialize instance of string from START_ARRAY value [line:1, column:2]
意味着服务器期望字段值是一个字符串,但请求有一个数组。
因此猜测 sheet.col_values() returns 是一个数组,你想把它改成
Email = sheet.col_values(1, 1)[0]
Last = sheet.col_values(2, 1)[0]
First = sheet.col_values(3, 1)[0]
第二期更新: 缩进在 python 中很重要,您的创建调用只发生一次,因为它在循环之外,您需要将其移动到循环内,例如
for c in range(sheet.ncols):
for r in range(sheet.nrows):
Email = sheet.col_values(1,r)[0]
print Email
Last = sheet.col_values(2,r)[0]
print Last
First = sheet.col_values(3,r)[0]
print First
Phone = sheet.col_values(4,r)[0]
print Phone
Street = sheet.col_values(5,r)[0]
print Street
City = sheet.col_values(6,r)[0]
print City
Postal = sheet.col_values(7,r)[0]
print Postal
Product = sheet.col_values(8,r)[0]
print Product
Store = sheet.col_values(9,r)[0]
print Store
SN = sheet.col_values(10,r)[0]
print SN
Name = sheet.col_values(3,r)[0]+sheet.col_values(2,r)[0]
sf.Contact.create({'FirstName' : First, 'LastName' : Last, 'Email' : Email, 'Phone' : Phone, 'MailingStreet' : Street, 'MailingCity' : City, 'MailingPostalCode' : Postal})