@
mylifcc 这个应该是 js 的对象(字面量)吧:
https://zh.javascript.info/object试着写了一个( v 站排版原因,行首有若干全角空格):
1. 可以是数字、布尔、空值、字符串、列表、字典的随意组合
2. 除了字典的键会直接字符串化外,其他字符串会遵循 json 的要求,不包含控制字符和 \ "(替换为转义字符或十六进制)
from typing import Sequence, Mapping
ESCAPE_TABLE = str.maketrans(
{chr(i): f'\\u{i:04x}' for i in range(32)} |
{k: f'\\{v}' for k, v in zip('\b\t\n\f\r\\"', 'btnfr"\\')}
)
def jsonify(obj) -> str:
if isinstance(obj, str):
return f'"{obj.translate(ESCAPE_TABLE)}"'
elif isinstance(obj, Sequence):
return f"[{', '.join(map(jsonify, obj))}]"
elif isinstance(obj, Mapping):
return f"{{{', '.join(f'{k}: {jsonify(v)}' for k, v in obj.items())}}}"
else:
return str({
None: 'null',
True: 'true',
False: 'false',
}.get(obj, obj))