You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Python Bokeh至0.12.4后遇JSON类型错误求解决方案

修复Bokeh 0.12.4在Flask嵌入时的「JSON object has wrong type string」错误

嘿,我刚好碰到过类似的问题!升级Bokeh到0.12.4后在Flask嵌入场景里踩过这个JSON类型的坑,给你几个简易的修复步骤,亲测有效:

核心原因

这个错误本质是Flask模板默认会转义HTML/JS内容,导致Bokeh生成的脚本被转义后变成了无效的JSON字符串——而Jupyter环境里Bokeh会自动处理转义逻辑,所以没出现这个问题。另外Bokeh 0.12.4对JSON序列化的要求比之前版本更严格,这也放大了这个问题。

简易修复方案

1. 检查视图函数的components()调用

确保你在Flask视图里正确生成Bokeh的脚本和div组件:

from bokeh.embed import components
from bokeh.plotting import figure
from flask import render_template

# 生成你的Bokeh图表
p = figure(title="示例图表")
p.circle([1,2,3], [4,5,6])

# 生成嵌入所需的script和div
script, div = components(p)

# 把组件传给模板
return render_template('graph.html', script=script, div=div)

2. 修改模板的嵌入代码(关键!)

打开你的graph.html,确保引用Bokeh的官方CDN资源,并且给script和div变量加上|safe过滤器——这个过滤器会告诉Flask不要转义这些内容,让Bokeh的脚本能正常解析:

<!DOCTYPE html>
<html>
<head>
    <title>Flask + Bokeh</title>
    <!-- 直接用Bokeh官方CDN,无需本地库 -->
    <link rel="stylesheet" href="https://cdn.bokeh.org/bokeh/release/bokeh-0.12.4.min.css" type="text/css">
    <script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-0.12.4.min.js"></script>
</head>
<body>
    <!-- 用|safe确保div不被转义 -->
    {{ div|safe }}
    <!-- 用|safe确保脚本的JSON内容正常解析 -->
    {{ script|safe }}
</body>
</html>

3. 额外排查点(如果上面没解决)

如果你是手动处理Bokeh的JSON数据(比如不用components()而是自己生成JSON),一定要用json.dumps()来序列化,而不是直接转成字符串:

import json
from bokeh.resources import CDN

# 正确序列化图表为JSON
plot_json = json.dumps(p.to_json())
# 获取CDN资源链接
cdn_js = CDN.js_files[0]
cdn_css = CDN.css_files[0]

# 传给模板时同样要在模板里用{{ plot_json|safe }}

验证

重启你的Flask服务,刷新页面——这个「JSON object has wrong type string」错误应该就消失了!

内容的提问来源于stack exchange,提问作者Lars Ericson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:49:38