首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在_default TypeError中(f“类型为{ type (o).__name__}的对象不可JSON序列化”)

在_default TypeError中(f“类型为{ type (o).__name__}的对象不可JSON序列化”)
EN

Stack Overflow用户
提问于 2022-08-25 11:55:39
回答 1查看 532关注 0票数 -2

这些是我的代码,但我不知道为什么错误仍然出现,我试图从光标转换为json,但什么也没有发生。

在下面的代码中,我需要从表单获取输入,并从mongodb服务器返回数据,这样我就可以获取这些数据并对其应用一些筛选。

filter.py

代码语言:javascript
运行
复制
# import json
from ast import dump
from flask import Flask, jsonify, request, session, redirect
from app import db
import pymongo
from bson.json_util import dumps
import json
from bson import json_util


class Filter():
    def __init__(self):
        pass
    def filter_tweets(self):
        conditions = {
            "filterby":request.form.getlist('checkbox'),

            "forlikes":request.form.get('likeElements'),
            "forreplies":request.form.get('replyElements'),
            "forretweets":request.form.get('retweetElements'),
            "likenumber":request.form.get('forlike'),
            "likenumber":request.form.get('forreply'),
            "likenumber":request.form.get('forretweets'),
        }

        session['conditions'] = conditions

        session['data'] = db.tweets.find().sort(str(session['conditions']['filterby']),pymongo.ASCENDING)

        json_docs = []
        for doc in session['data']:
            json_docs.append(doc)

        return json_docs

她可以看到我的路由在('/myTweets')路由中应用该方法过滤数据之后,它将返回过滤后的数据

routes.py

代码语言:javascript
运行
复制
@app.route('/tweets/filter')
def filter():
    return render_template('filtering.html')

@app.route('/myTweets',methods=['POST'])
def filter_tweet():
    test = Filter().filter_tweets()
    return test


@app.route('/test')
def test():
    test = Filter().filter_tweets()
    return render_template('test.html')

这是我的js代码,带我去下一条路线。

scripts.js

代码语言:javascript
运行
复制
$("form[name=filter-form").submit(function (e) {
    var $form = $(this);
    var $error = $form.find(".error");
    var data = $form.serialize();

    $.ajax({
        url: "/myTweets",
        type: "POST",
        data: data,
        dataType: "json",
        success: function (resp) {
            window.location.href = "/test";
        },
        error: function (resp) {
            $error.text(resp.responseJSON.error).removeClass("error--hidden");
        }
    })
    e.preventDefault();
})

错误停用:

代码语言:javascript
运行
复制
127.0.0.1 - - [25/Aug/2022 14:22:18] "POST /myTweets HTTP/1.1" 500 -
Traceback (most recent call last):
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 2548, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 2528, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 1823, in full_dispatch_request
    return self.finalize_request(rv)
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 1844, in finalize_request
    response = self.process_response(response)
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\app.py", line 2340, in process_response
    self.session_interface.save_session(self, ctx.session, response)
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\sessions.py", line 409, in save_session
    val = self.get_signing_serializer(app).dumps(dict(session))  # type: ignore
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\itsdangerous\serializer.py", line 207, in dumps
    payload = want_bytes(self.dump_payload(obj))
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\itsdangerous\url_safe.py", line 53, in dump_payload
    json = super().dump_payload(obj)
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\itsdangerous\serializer.py", line 169, in dump_payload       
    return want_bytes(self.serializer.dumps(obj, **self.serializer_kwargs))
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\json\tag.py", line 308, in dumps
    return dumps(self.tag(value), separators=(",", ":"))
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\json\__init__.py", line 124, in dumps
    return app.json.dumps(obj, **kwargs)
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\json\provider.py", line 230, in dumps
    return json.dumps(obj, **kwargs)
  File "C:\Users\hadim\AppData\Local\Programs\Python\Python310\lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "C:\Users\hadim\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Users\hadim\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Users\hadim\Desktop\StageProject\Flask&MongoDB\env\lib\site-packages\flask\json\provider.py", line 122, in _default
    raise TypeError(f"Object of type {type(o).__name__} is not JSON serializable")
TypeError: Object of type Cursor is not JSON serializable

pl

EN

回答 1

Stack Overflow用户

发布于 2022-08-25 18:47:11

.find()返回一个游标。如果要将数据输出到json,请首先将其转换为列表:

代码语言:javascript
运行
复制
session['data'] = list(db.tweets.find().sort(str(session['conditions']['filterby']),pymongo.ASCENDING))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73487039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档