bokeh.core.json_encoder#

提供函数和类来实现自定义 JSON 编码器,用于序列化 BokehJS 的对象。

一般来说,此模块中的函数以以下方式转换值

  • 日期时间值(Python、Pandas、NumPy)转换为自纪元以来的毫秒浮点数。

  • 时间差值转换为绝对毫秒浮点数。

  • 相对时间差值转换为字典。

  • 十进制值转换为浮点数。

  • 通过此接口传递的序列(Pandas Series、NumPy 数组、python 序列)转换为列表。但是,请注意,Bokeh 文档中数据源中的数组在其他地方转换,默认情况下使用二进制编码格式。

  • Bokeh Model 实例通常在整个 Bokeh 文档的上下文中序列化。通过此接口传递的模型转换为引用。

  • HasProps(不是 Bokeh 模型)转换为其所有属性和值的键/值字典。

  • Color 实例转换为 CSS 颜色值。

serialize_json(obj: Any | Serialized[Any], *, pretty: bool | None = None, indent: int | None = None) str[source]#

将对象或序列化表示转换为 JSON 字符串。

此函数接受 Python 可序列化对象并将其转换为 JSON 字符串。此函数不执行任何高级序列化,特别是它不会序列化 Bokeh 模型或 numpy 数组。为此,请使用 bokeh.core.serialization.Serializer 类,它处理可能在 Bokeh 中遇到的所有类型对象的序列化。

参数:
  • obj (obj) – 要序列化为 JSON 格式的对象

  • pretty (bool, 可选) –

    是否生成美化的输出。如果为 True,则在分隔符后添加空格,并应用缩进和换行符。(默认值:False)

    也可以使用环境变量 BOKEH_PRETTY 启用美化输出,如果设置了此变量,则会覆盖此参数。

  • indent (intNone, 可选) – 在生成的 JSON 输出中使用的缩进量。如果为 None,则不使用缩进,除非启用了美化输出,在这种情况下将使用两个空格。(默认值:None)

返回值:

RFC-8259 JSON 字符串

返回类型:

str

示例

>>> import numpy as np

>>> from bokeh.core.serialization import Serializer
>>> from bokeh.core.json_encoder import serialize_json

>>> s = Serializer()

>>> obj = dict(b=np.datetime64("2023-02-25"), a=np.arange(3))
>>> rep = s.encode(obj)
>>> rep
{
    'type': 'map',
    'entries': [
        ('b', 1677283200000.0),
        ('a', {
            'type': 'ndarray',
            'array': {'type': 'bytes', 'data': Buffer(id='p1000', data=<memory at 0x7fe5300e2d40>)},
            'shape': [3],
            'dtype': 'int32',
            'order': 'little',
        }),
    ],
}

>>> serialize_json(rep)
'{"type":"map","entries":[["b",1677283200000.0],["a",{"type":"ndarray","array":'
"{"type":"bytes","data":"AAAAAAEAAAACAAAA"},"shape":[3],"dtype":"int32","order":"little"}]]}'

注意

使用此函数并非严格必要。可以将序列化程序配置为生成与标准库模块 json 中的 dumps() 完全兼容的输出。此函数与 dumps() 之间的主要区别在于处理内存缓冲区。使用以下设置

>>> s = Serializer(deferred=False)

>>> import json
>>> json.dumps(s.encode(obj))