将dict转换为json时指数错误

时间:2014-05-20 14:31:50

标签: python json dictionary

我必须创建这个JSON对象:

cookie = {"SX": '{"gc":1,"gsc":1,"ls":[{"itn":"20456","qty":1,"ritn":"20456","tp":0}]}'}

为此我正在使用字典和类似的列表

cookieJson = {} 
sku = '20456'
d = {'itn':sku,'qty':1,'ritn':sku,'tp':0}
l.append(d)
cookieJson["SX"] = {'gc':1,'gsc':1,'ls':l}
j = json.dumps(cookieJson)
cookie = j #Error here
html = session.get('https://example.com',headers=headers, verify=False, timeout=5, cookies=cookie)

然而它抛出异常:string indices must be integers not str dictionary

我做错了什么?


LukasGraf

编辑

这就是一个完整的例子:

import json

sku = 5
l = []
cookieJson = {}

d = {'itn':sku,'qty':1,'ritn':sku,'tp':0}
l.append(d)
cookieJson["SX"] = {'gc':1,'gsc':1,'ls':l}
j = json.dumps(cookieJson)
print j
  • 它包含运行它所需的所有。包含所有导入,示例中使用的所有名称都已定义
  • 任何人都可以将其复制并粘贴到*.py文件中并在不更改单个字符的情况下运行
  • 此示例有效,因为您可以自己测试。因此,请相应更新,以便显示您遇到的问题。

1 个答案:

答案 0 :(得分:1)

所以我在这里尝试你的例子:

>>> import json, requests
>>> l = []
>>> 
>>> cookieJson = {} 
>>> sku = '20456'
>>> d = {'itn':sku,'qty':1,'ritn':sku,'tp':0}
>>> l.append(d)
>>> cookieJson["SX"] = {'gc':1,'gsc':1,'ls':l}
>>> j = json.dumps(cookieJson)
>>> html = requests.get('https://example.com', cookies=cookieJson)
Traceback (most recent call last):
[...]
TypeError: expected string or buffer

你的问题是你试图使用除字符串之外的任何东西作为cookie的值 字典,而cookie字典应该是一个简单的平面字典 字符串。所以以下工作正常:

>>> d = {'itn':sku,'qty':'1','ritn':sku,'tp':'0'}
>>> html = requests.get('https://example.com', cookies=d)

你的问题是你使用的是整数数据类型,而cookie只适用于 字符串。您不能拥有10 s,也不能将dict作为值。

如果您真的坚持创建具有多个值的cookie,那么您唯一的解决方案就是执行以下操作:

>>> html = requests.get('https://example.com', cookies={"mycookie": json.dumps(cookieJson)})

"mycookie"键下创建包含完整json字符串作为值的cookie的位置。然后,您将反序列化cookie的值以恢复数据。