Python未能使用urllib2进行PUT

Python未能使用urllib2进行PUT,python,json,urllib2,Python,Json,Urllib2,我正在尝试使用urllib2执行http put 服务器管理员说我需要以以下格式提供数据: {“类型”:“存储”,“数据”:[“9953”]} 我的代码如下: url = 'https://url.com/polling/v1/5cb401c5-bded-40f8-84bb-6566cdeb3dbb/stores' request = urllib2.Request(url, data='{\"type\":\"store\",\"data\":[\"9953\"]}') request.add

我正在尝试使用urllib2执行http put

服务器管理员说我需要以以下格式提供数据: {“类型”:“存储”,“数据”:[“9953”]}

我的代码如下:

url = 'https://url.com/polling/v1/5cb401c5-bded-40f8-84bb-6566cdeb3dbb/stores'
request = urllib2.Request(url, data='{\"type\":\"store\",\"data\":[\"9953\"]}')
request.add_header("Authorization", "Basic %s" % creds)
request.add_header("Content-type", "application/json")
request.add_header("Accept", "application/json")
print "Data: %s" % request.get_data()
print "Accept: %s" % request.get_header("Accept")
print "Content-Type: %s" % request.get_header("Content-type")
print "Authorization: %s" % request.get_header("Authorization")
try:
    result = urllib2.urlopen(request, data )
except urllib2.HTTPError as e:
    print e.read()
    exit()
data = json.loads(result.read())
print data
运行此操作时,我的输出为:

Data: {"type":"store","data":["9953"]}
Accept: application/json
Content-Type: application/json
Authorization: Basic U1lTQ1RMOmFiYzEyMw==
这正是我被要求发送的

但我得到了以下错误:

BWEB000065: HTTP Status 400 - org.codehaus.jackson.JsonParseException: Unexpected end-of-input: expected close marker for ARRAY (from [Source: org.jboss.resteasy.core.interception.MessageBodyReaderContextImpl$InputStreamWrapper@695dd38d; line: 2, column: 15])

任何帮助都将不胜感激。

请注意以下两行代码:

request = urllib2.Request(url, data='{\"type\":\"store\",\"data\":[\"9953\"]}')

result = urllib2.urlopen(request, data)
在第一行中,通过将
data
命名参数集传递给JSON负载来初始化请求。这似乎是正确的

但是,第二行传入
数据
,覆盖在第一行中初始化的有效负载。我假设
data
这里是程序更大上下文中的某个变量(原始问题中未显示),并且该
data
变量被设置为某个不同的值,可能是无效的JSON负载

如果第一行中的有效负载已正确初始化,则我建议将第二行更改为:

result = urllib2.urlopen(request)

为什么要在单引号(')中转义双引号(“)?(L2)应用程序管理员告诉我“确保正确转义双引号”。删除转义会产生相同的结果。