我正在尝试获取“id”号码,然后在程序中使用它。如果重要,响应是.json
{"run_at":1818086502,"quantity":295092,"queue":"units","original_duration":388900193,"duration":388900193,"unit_type":"Harrier","city_id":1102142875,"id":3720348749},"success":true}}
这是“id”所在的响应的一部分。
这就是我到目前为止所做的:
cadena= "Draoumculiasis" + params + "LandCrocodile" + url + "Bevar-Asp"
cadenau=cadena.encode('utf8')
m=hashlib.sha1(cadenau)
xs3=m.hexdigest()
headers= { 'Host': realm , 'Connection': 'keep-alive', 'Content-Length': len(params), 'Origin': 'http://castlemania-production.s3.amazonaws.com', 'x-s3-aws': xs3, 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11', 'content-type': 'application/x-www-form-urlencoded', 'Accept': '*/*', 'Accept-Encoding': 'gzip,deflate,sdch', 'Accept-Language': 'es-ES,es;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'DNT': 1, 'Cookie': cookie }
conn=http.client.HTTPConnection(realm,80)
conn.request("POST",url,params, headers)
response=conn.getresponse()
ID每次都会更改。
我已经制作了使用id的部分,我需要连接这两个而不需要手动输入。 可悲的是,我不是程序员,所以我正在寻找完整的解决方案,如果可能的话。我做了一些研究,但无法弄清楚。
更新1
正如Gord的回答中所建议的,我使用
responseData = response.read().decode('utf-8')
items = json.loads(responseData)
现在我收到了错误
Traceback (most recent call last):
File "N:\Files\doa\Py's\testinggettingid.py", line 54, in <module>
items = json.loads(responseData)
File "C:\Python34\lib\json\__init__.py", line 318, in loads
return _default_decoder.decode(s)
File "C:\Python34\lib\json\decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python34\lib\json\decoder.py", line 361, in raw_decode
raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line1 column 1 (char 0)
更新2 我已经通过
删除了错误 response=conn.getresponse()
responseData = response.read().decode('utf-8')
print(responseData)
items = json.loads(responseData)
idValue = items['id']
print(idValue)
但是它显示了我的玩家ID,而不是作业ID。
更新3
根据请求打印(response.getheaders())
答案 0 :(得分:0)
如果我理解正确,您有一个JSON响应,并且您想要提取名为“id”的字段的值。从您的问题看来,您似乎不熟悉JSON语法。如果是这种情况,请咨询W3schools' JSON syntax manual和/或the documentation for Python's JSON library。
import json
response = json.loads("{\"msg\": {\"run_at\":1818086502,\"quantity\":295092,\"queue\":\"units\",\"original_duration\":388900193,\"duration\":388900193,\"unit_type\":\"Harrier\",\"city_id\":1102142875,\"id\":3720348749},\"success\": true}")
print response["msg"]["id"]
上面的代码在对象“msg”中打印字段“id”的值。
答案 1 :(得分:0)
考虑一个代码行
的简化示例>>> response=conn.getresponse()
已从服务器检索响应并将其保存为HTTPResponse object,当您.read()
响应时,您会看到类似这样的JSON字符串
>>> responseData = response.read().decode('utf-8')
>>> responseData
'{"day": "Thursday", "id": 3720348749}'
您可以使用Python的内置JSON解码器将其转换为名为items
>>> import json
>>> items = json.loads(responseData)
现在,您可以通过引用其键为&#39; id&#39;
的词典条目来提取id
值
>>> idValue = items['id']
>>> print(idValue)
3720348749
如果明天运行相同的代码,则返回的response
对象包含
>>> responseData = response.read().decode('utf-8')
>>> responseData
'{"day": "Friday", "id": 4567890123}'
然后,同一组步骤将提取id
>>> import json
>>> items = json.loads(responseData)
>>> idValue = items['id']
>>> print(idValue)
4567890123
<强>更新强>
如果您的实际JSON数据包含嵌套元素,那么您可能需要使用多个&#34; key&#34;用于标识所需项目的值。例如,如果&#34; id&#34;你想要检索实际上是
result
job
id
即,JSON看起来像
'{"result": {"job": {"id": 12345678}}}'
然后你需要使用
idValue = items['result']['job']['id']