не может исправить ошибку: объект типа ListVector не JSON сериализуемый на flask? - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь сделать запрос информации о сеансе и могу распечатать информацию о сеансе на консоли python, но не могу вернуть информацию о сеансе на конечной точке сервера. Ошибка говорит, что объект не JSON сериализуемый. Вот сообщение об ошибке:

TypeError: Object of type ListVector is not JSON serializable

Я нашел это сообщение , относящееся к моему сообщению, я пробовал его решение, но это не так не работает для меня. как я могу преобразовать 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)

здесь я просто делаю запрос к конечной точке сервера, я могу распечатать информацию о сеансе на консоли, но не могу вернуть его на конечную точку сервера. как я могу сделать эту работу? любая быстрая мысль? спасибо

Есть ли возможное решение, чтобы исправить эту ошибку? есть идеи?

1 Ответ

1 голос
/ 26 апреля 2020

выполните вашу вышеуказанную попытку, я исправил вашу проблему следующим образом:

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 на конечной точке вашего сервера.

...