【发布时间】:2016-05-26 17:48:02
【问题描述】:
我有一个 JSON 文件,其格式类似于
{
"unknown1":
[
{"text": "random text again",
"time": "Thu May 15 19:21:59 +0000 2016"},
"text": "akmfkdlm safsa fasffalmfa",
"time": "Thu May 21 09:53:51 +0000 2016"}
]
"unknown2":
[
"text": "fsda lmfalmfa",
"time": "Thu May 21 09:53:51 +0000 2016"},
]
}
JSON 中的第一项是随机(未知)标签,可以有任意数量的这些未知数。在这些未知数中总是有一堆text/time 配对。
我正在尝试将每个 text 发送到接受 JSON 格式的 REST 发布服务
text: "foo bar bat",
mime_type: "text/html",
extract_type: "HP" # HP, MP
所以当我尝试运行我的代码但我不知道该怎么做时,我收到了这个错误。
这是我的代码:
import json
import requests
with open('locations_stripped.json') as data_file:
data = json.load(data_file)
headers = {'Content-Type' : 'application/json'}
for thing in data:
for text, time in data.iteritems():
print text
body = [{ "text": text , "mime_type": "text/html", "extract_type": "HP"}]
r = requests.post('localhost:3003/api/extract/run', data=body, headers=headers)
print (r.content)
这是错误:
$ python filterrest.py
unknown1
Traceback (most recent call last):
File "filterrest.py", line 30, in <module>
r = requests.post('localhost:3003/api/extract/run', data=body, headers=headers)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py", line 111, in post
return request('post', url, data=data, json=json, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py", line 57, in request
return session.request(method=method, url=url, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/sessions.py", line 461, in request
prep = self.prepare_request(req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/sessions.py", line 394, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/models.py", line 298, in prepare
self.prepare_body(data, files, json)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/models.py", line 452, in prepare_body
body = self._encode_params(data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/models.py", line 89, in _encode_params
for k, vs in to_key_val_list(data):
ValueError: too many values to unpack
需要注意的一点是它正在打印错误的文本(“unknown1”而不是“再次随机文本”),我不知道如何让它只打印文本。
有什么帮助吗?
更新
根据每个人的回答/评论,我更改了代码
...
for thing in data:
for text in data[thing]:
print text['text']
这会打印出我所期望的 text['text'] 。问题在于我执行请求的方式。我更改了我的代码作为测试并将数据设置为我知道应该工作的东西(我通过Postman 运行它)。
更改代码:
r = requests.post('localhost:3003/api/extract/run', data='Hello. Where does the brown fox go?', headers=headers)
预期响应:
[
{
"score": 0.30253747367501777,
"tag": "HP",
}
]
相反,打印出来的是看起来像整个 HTML 页面的内容。
【问题讨论】:
-
你的 Json 格式是假的。看这里
"text: "akmfkdlm safsa fasffalmfa"。您的body是list。必须是dict -
for thing in data: for text, time in data.iteritems():也是假的 ;) -
哎呀。我手动输入了 JSON,但它直接来自文件,因此 JSON 绝对有效。将问题编辑为有效!
-
但就像我写的那样。整数
data=bodybody必须是dict -
啊,好吧。这似乎解决了这个问题,但由于某种原因,我的请求在打印时看起来像是整个 HTML 页面而不是响应。
标签: python json rest http-post httprequest