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

Python Flask返回JSON字符串,自定义对象转JSON字符串

解决方案:

有问题的方法

json.dumps方法不能对自定义对象直接序列化,首先把自定义对象转换成字典 data.__dict__

Python Flask返回JSON字符串,自定义对象转JSON字符串

这种方法虽然方便,但是会多出一些其他无关的属性:如图,红色区域才是我的正确属性,其他都是自带的,我并不需要这些

Python Flask返回JSON字符串,自定义对象转JSON字符串

正确的方法

最后,没有找到更好的办法,就线手动转换了

Python Flask返回JSON字符串,自定义对象转JSON字符串

代码如下:

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开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:Python连接MSSQL数据库pyodbc方案
下一篇:Python pyinstaller 打包参数说明
评论列表

发表评论

评论内容
昵称:
关联文章

Python Flask返回JSON字符串定义对象JSON字符串
Python对象json字符串
C# 使用Newtonsoft对象JSON字符串的时候日期类型的处理
自己创造一个格式,定义文件后缀名
对象和Datatable互
C#格式化JSON字符串
JSON.stringify 输出JSON字符串时对日期Date类型的处理
C# Newtonsoft.Json.JsonConvert.SerializeObject生成格式化的JSON字符串
C# 配置文件增加定义节点
ASP.NET Core统一接口返回模型
SQL Prompt定义代码片段
定义表格操作按钮 GridControlEmbeddedNavigator
C# Winform 定义异常处理方法
.NET Core 定义中间件 Middleware
C#代码:byte[] 十六进制字符串
DbDataReader对象
C# 十六进制字符串byte[],Byte[] String
Redis OM .NET Redis对象映射框架
C# 根据DataTable 转换成JSON 文本字符串数据
Excel定义格式千分符

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码