"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})