我正在尝试从python 3.5中的API调用获取响应,并且需要过滤掉输出。
http响应已转换为字典,但是由于某种原因,我无法在其上应用字典功能。
我想使用标准内置函数(例如result.items(),result.keys()等)从字典中打印键,值
代码:
import os
import json
from xml.etree.ElementTree import ElementTree
import requests
import urllib
import requests
url = 'http://demo.assetexplorer.com/api/cmdb/ci/count/all?OPERATION_NAME=read&TECHNICIAN_KEY=5E28C6CA-CCE2-4C2F-A91D-B37CCA17C629'
response = urllib.request.urlopen(url)
result = json.loads(response.readline().decode('utf-8'))
print(type(result))
print(result)
输出:
<class 'dict'>
{'API': {'response': {'operation': {'name': 'read', 'Details': {'field-values': {'record': {'value': 203}, 'totalRecords': 1}, 'field-names': {'name': {'content': 'Count', 'type': 'Integer'}}}, 'result': {'status': 'Success', 'created-date': 'Jul 28, 2018 03:36 PM', 'statuscode': 200, 'message': 'Successfully fetched.'}}}, 'version': 1}}
答案 0 :(得分:0)
我尝试使用python 3.6。清理代码,然后test_dict.items()和test_dict.keys()都可以工作。 第一件事是http://www.example.com没有提供json,所以我用了'https://jsonplaceholder.typicode.com/posts/1'
第二件事是将urllib与解码器一起使用给我错误“ json.decoder.JSONDecodeError:期望属性名称用双引号引起来:” 因此根据此stackoverflow post
对其进行了修改这是工作代码
import json
import requests
url = 'https://jsonplaceholder.typicode.com/posts/1'
test_value = requests.get(url).json()
print(test_value)
print(test_value.items())
print(test_value.keys())
这是输出
{'userId':1,'id':1,'title':'sut a face face repellat Provident occaecatiexcepturi optio reprehenderit','body':'quia et suscipit \ nsuscipit recusandae consequuntur expedita et cum \ nreprehenderit molestiae ut qua quatam \ nnostrum rerum est autem sunt rem eveniet architecto'}
dict_items([('userId',1),('id',1),('title','sut aut facere repellat Provident occaecatiexcepturi optio reprehenderit'),('body','quia et suscipit \ nsuscipit recusandae consequuntur expedita et cum \ nreprehenderit molestiae ut ut quas totam \ nnostrum rerum est autem sunt rem eveniet architecto')]))
dict_keys(['userId','id','title','body'])