Python Json序列化问题
可能是一个非常基本的问题,但我找不到答案,因为这需要我没有的知识,或者不适用于我的案例 我正在运行一个简单的python脚本来获得一些json响应。基本上我有一个防火墙,我需要从配置文件中“读取”一些信息 以下是我的python脚本中有趣的部分:Python Json序列化问题,python,json,serialization,Python,Json,Serialization,可能是一个非常基本的问题,但我找不到答案,因为这需要我没有的知识,或者不适用于我的案例 我正在运行一个简单的python脚本来获得一些json响应。基本上我有一个防火墙,我需要从配置文件中“读取”一些信息 以下是我的python脚本中有趣的部分: client = requests.session() requests.packages.urllib3.disable_warnings() api_cmdb = 'api/v2/cmdb/' api_monitor = 'api/v2/mo
client = requests.session()
requests.packages.urllib3.disable_warnings()
api_cmdb = 'api/v2/cmdb/'
api_monitor = 'api/v2/monitor/'
try:
login = client.post(url + '/logincheck', data="username=" + name + "&secretkey=" + password, verify = False)
except requests.exceptions.ConnectionError:
requests.status_code = "Connection refused"
ini = client.cookies['ccsrftoken']
csrftoken = ini[1:-1]
client.headers.update({"X-CSRFTOKEN": csrftoken})
ae = client.get(url + api_cmdb + 'router/static', verify = False, params = {'vdom': 'root'})
#print json.dumps(vars(ae))
resp = ae.json()
pprint(resp)
client_logout = client.post(url + '/logout', verify = False)
client.close()
我们在使用ae.json()时得到了这个结果:
我不明白的是,为什么当我发布print json.dumps(vars(ae))或print json.dumps(ae)时会得到一个:
raisetypeerror(repr(o)+“不可JSON序列化”)
TypeError:不可序列化JSON
非常感谢这是因为
ae
是一个响应
对象。调用ae.json()
时,它返回该响应对象的json表示形式,但尝试手动序列化它将抛出错误,因为json
模块不知道如何将响应
对象转换为有效的json。你应该给我打个电话
print json.dumps(ae.json())
它将使用自己的内部逻辑(.JSON()
方法)获取响应
对象的JSON表示,然后打印它的字符串版本。vars(ae)
或ae。uu dict\uuu
返回对象属性和值的字典。如果您检查它,您将看到它不仅包含响应主体(通过调用ae.json()
)转换为json),还包含许多其他属性。通常,它们中的一些可能是对象(在您的例子中是来自请求的响应对象),而不仅仅是字符串、列表等简单类型
如果您想继续(如果这对您有意义的话),您需要继续自己的json.jsonecoder
和json.JSONDecoder
实现
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <Response [200]> is not JSON serializable
print json.dumps(ae.json())