bokeh.core.json_encoder#

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

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

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

  • TimeDelta 值被转换为绝对浮点毫秒数。

  • RelativeDelta 值被转换为字典。

  • Decimal 值被转换为浮点数。

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

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

  • 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, optional) –

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

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

  • indent (intNone, optional) – 生成的 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))