File size: 995 Bytes
8b4a5e6
 
 
 
 
d528086
8b4a5e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d528086
8b4a5e6
 
 
 
d528086
8b4a5e6
 
 
 
d528086
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from __future__ import annotations
import json
from typing import Any, Dict

def to_jsonable(obj: Any) -> Any:
    """Safely convert pandas/numpy objects to JSON-able python types."""
    try:
        import numpy as np
        import pandas as pd
    except Exception:
        np = None
        pd = None

    if pd is not None and isinstance(obj, pd.DataFrame):
        return obj.to_dict(orient="records")
    if pd is not None and isinstance(obj, pd.Series):
        return obj.to_dict()
    if np is not None and isinstance(obj, (np.integer,)):
        return int(obj)
    if np is not None and isinstance(obj, (np.floating,)):
        f = float(obj)
        if f != f:  # NaN
            return None
        return f
    if isinstance(obj, (set,)):
        return list(obj)
    if isinstance(obj, (bytes, bytearray)):
        return obj.decode("utf-8", errors="ignore")
    return obj

def dumps(d: Dict[str, Any]) -> str:
    return json.dumps(d, ensure_ascii=False, default=to_jsonable)