【问题标题】:can't fix error: Object of type ListVector is not JSON serializable on flask?无法修复错误:ListVector 类型的对象在烧瓶上不是 JSON 可序列化的?
【发布时间】:2020-08-10 07:05:13
【问题描述】:

我正在尝试请求会话信息,我可以在 python 控制台上打印出会话信息,但无法在服务器端点上返回会话信息。该错误表示该对象不是 JSON 可序列化的。这是错误消息:

TypeError: Object of type ListVector is not JSON serializable

我发现this post 与我的帖子相关,我尝试了它的解决方案,但它对我不起作用。如何将rpy2.ListVector 转换为可以被JSON 序列化的字典?有什么解决办法吗?

我的尝试:

from flask import Flask, jsonify, request
from flask_restplus import Api, Resource
import json

##
import os

os.environ['PYTHONHOME'] = r"C:\Users\me\AppData\Local\Programs\Python\Python37"
os.environ['PYTHONPATH'] = r"C:\Users\me\AppData\Local\Programs\Python\Python37\Lib\site-packages"
os.environ['R_HOME'] = r"C:\Program Files\R\R-3.3.2"
os.environ['R_USER'] = r"C:\Users\me\AppData\Local\Programs\Python\Python37\Lib\site-packages\rpy2"
##

app = Flask(__name__)
api = Api(app)
ns = api.namespace('ns')

## load R function
import rpy2
import rpy2.robjects as robjects
@api.route('/')
class AResource(Resource):
    def post(self):
        sess = robjects.r("sessionInfo()")
        return jsonify({'sessioninfo': sess})

if __name__ == '__main__':
    api.add_namespace(ns)
    app.run(debug=True)

这里我只是简单地向服务器端点发出请求,我可以在控制台上打印出会话信息,但不能在服务器端点上返回它。我怎样才能使这项工作?有什么快速的想法吗?谢谢

是否有任何可能的解决方案来解决此错误?有什么想法吗?

【问题讨论】:

    标签: python json flask rpy2


    【解决方案1】:

    按照您的上述尝试,我将您的问题修复如下:

    class AResource(Resource):
        def post(self):
            sess = robjects.r("sessionInfo()")
            new_sess= { key : sess.rx2(key)[0] for key in sess.names }
            return jsonify({'sessioninfo': str(new_sess)})
    

    现在您可以在服务器端点上看到 json 输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 2022-12-21
      • 2014-11-25
      • 2021-01-19
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多