如何序列化python类以传递到javascript
我试图将一个变量传递到flask中的javascript上。 但是我得到了以下错误:如何序列化python类以传递到javascript,javascript,python,html,flask,jinja2,Javascript,Python,Html,Flask,Jinja2,我试图将一个变量传递到flask中的javascript上。 但是我得到了以下错误:TypeError:MyClass类型的对象不是JSON可序列化的 代码: routes.py: @app.route('/') @app.route('/index') def index(): data = { "foo": myObj } return render_template('index.html', data=data) 请注意,my
TypeError:MyClass类型的对象不是JSON可序列化的
代码:
routes.py:
@app.route('/')
@app.route('/index')
def index():
data = {
"foo": myObj
}
return render_template('index.html', data=data)
请注意,myObj
是MyClass类型的自定义类对象
index.html:
<script src="{{ url_for('static', filename='my_script.js', type="module") }}" crossorigin="anonymous"
defer>
</script>
<script>
let data = {{ data|tojson }};
</script>
我试图简单地编写{{data}}
而不是{{data|tojson}
,但是我得到了错误:
Uncaught SyntaxError:Unexpected token'&'
和my_script.js?type=module:1 Uncaught ReferenceError:my_script.js?type=module:1未定义数据
我知道有很多问题,但我找不到解决这个问题的方法。这里的问题是您试图将Python对象传递给Javascript。这是行不通的。最好的方法是将其转换为JSON,这在Python和Javascript之间是兼容的
使用json
模块,您可以序列化词典。但是,MyClass
的Python对象不可JSON序列化。您应该能够序列化\uuuu data\uuu
属性,它是对象中属性的字典
按如下方式更改Python:
import json
@app.route('/')
@app.route('/index')
def index():
data = {
"foo": myObj.__dict__
}
return render_template('index.html', data=json.dumps(data))
这里的问题是您试图将Python对象传递给Javascript。这是行不通的。最好的方法是将其转换为JSON,这在Python和Javascript之间是兼容的
使用json
模块,您可以序列化词典。但是,MyClass
的Python对象不可JSON序列化。您应该能够序列化\uuuu data\uuu
属性,它是对象中属性的字典
按如下方式更改Python:
import json
@app.route('/')
@app.route('/index')
def index():
data = {
"foo": myObj.__dict__
}
return render_template('index.html', data=json.dumps(data))
事实上,它奏效了。我不知道应该将其作为字符串传递,应该提到的是,在javascript中,如果需要,应该将json重新组装为对象<在我的例子中,code>data=JSON.parse(data)
,确实有效。我不知道应该将其作为字符串传递,应该提到的是,在javascript中,如果需要,应该将json重新组装为对象<在我的例子中,code>data=JSON.parse(data)。