"Cannot deserialize instance of string from START_ARRAY value" Salesforce API 问题



尝试用。xlsx工作表中的值创建SF Contact。

我可以创建一个联系人,如果我手动输入一个假的电子邮件地址,姓氏和名字,但不能引用它的值,我已经从一个xlsx表定义。打印命令工作正常,正在读取我想要它们读取的数据。

只做了2周的Python,现在已经能够读取,写入和保存数据到/从MySQLdb没有问题,但现在遇到这个问题,并没有找到太多的信息,特别是与SalesForce。任何帮助都将非常感激。

所以完整的错误是:

文件"C:Python27libsite-packagessimple_salesforce-0.70-py2.7.eggsimple_salesforceapi.py",第749行,在_exception_handler .py中提高exc_cls(结果。url,结果。状态码,名称,响应内容)simple_salesforce.api。salesforcemalformerequest:格式错误的请求https://na48.salesforce.com/services/data/v37.0/sobjects/Contact/。响应内容:[{u' errorcode ': u' json_parser_error ', u'message': u'不能反序列化来自START_ARRAY值的字符串实例[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上创建一个联系人/案例,这是xlsx工作表的最后一行,而不是为xlsx中的每一行创建一个联系人/案例。它读取大部分内容都是正确的,并且实际上以正确的方式创建了一个联系人,但只是最后一行。

当前代码:

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

来自服务器的错误消息为

无法从START_ARRAY value [line:1,]反序列化字符串实例专栏:2]

表示服务器期望字段值是字符串,但请求却是数组。

因此猜测sheet.col_values()返回一个数组,您希望将其更改为

Email = sheet.col_values(1, 1)[0]
Last  = sheet.col_values(2, 1)[0]
First = sheet.col_values(3, 1)[0]

第2期更新:缩进在python中很重要,你的create调用只发生一次,因为它在循环之外,你需要把它移到循环内,例如

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

最新更新