Python Flask返回JSON字符串,自定义对象转JSON字符串
Python利用Flash开发一个简易API的时候,接口需要返回JSON字符串
对象
Python 全选
class SettingConfig(json.JSONEncoder):
ip = ''
port = ''
ua = ''
size = ''
接口代码
Python 全选
# 编写路由
@app.route("/init", methods=["GET"])
def test():
data = SettingConfig()
ip = getIP()
data.ip = ip[0]
data.port = ip[1]
if 1 == 2:
_db = getdb()
data.ua = _db.user_agent
data.size = _db.window_size
if data.ua is None or data.ua == "":
data.ua = getUA()
if data.size is None or data.size == "":
_size = getWindowSize()
data.size = str(_size[0]) + ',' + str(_size[1])
return json.dumps(data)
报错信息:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\XQ-Garson\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 231, in dumps return _default_encoder.encode(obj)
File "C:\Users\XQ-Garson\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 199, in encode chunks = self.iterencode(o, _one_shot=True) File "C:\Users\XQ-Garson\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 257, in iterencode return _iterencode(o, 0)
File "C:\Users\XQ-Garson\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 179, in default raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type SettingConfig is not JSON serializable
解决方案:
有问题的方法
json.dumps方法不能对自定义对象直接序列化,首先把自定义对象转换成字典 data.__dict__
这种方法虽然方便,但是会多出一些其他无关的属性:如图,红色区域才是我的正确属性,其他都是自带的,我并不需要这些
正确的方法
最后,没有找到更好的办法,就线手动转换了
代码如下:
Python 全选
def test():
data = SettingConfig()
ip = getIP()
data.ip = ip[0]
data.port = ip[1]
if 1 == 2:
_db = getdb()
data.ua = _db.user_agent
data.size = _db.window_size
if data.ua is None or data.ua == "":
data.ua = getUA()
if data.size is None or data.size == "":
_size = getWindowSize()
data.size = str(_size[0]) + ',' + str(_size[1])
return json.dumps({
"ip": data.ip,
"port": data.port,
"ua": data.ua,
"size": data.size
})
虽然写法很低级,但是也算是实现了,如果找到了更好的办法,会再次补充
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 管理员