bokeh.core.json_encoder#

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

通常,此模块中的函数以下列方式转换值:

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

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

  • RelativeDelta 值被转换为字典。

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

  • 通过此接口传递的序列(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中可能遇到的所有类型对象的序列化。

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

  • pretty (bool, optional) –

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

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

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

Returns:

RFC-8259 JSON 字符串

Return type:

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))