修复 _df_to_json_payload 处理字符串控制字符导致的 JSON 解析失败
- 字符串字段去除 ASCII 控制字符 (\x00-\x08 \x0b \x0c \x0e-\x1f \x7f) - 保留 \t \n \r 转义,防止 JSON 解析失败 - 长文本字段如 ORG_PROFILE 的换行不再导致 /fin/company-info 等接口响应解析报错
This commit is contained in:
@@ -83,6 +83,7 @@ def _parse_stocks(raw: str) -> tuple[list[str], Optional[dict[str, str]]]:
|
|||||||
def _df_to_json_payload(df: pd.DataFrame) -> dict:
|
def _df_to_json_payload(df: pd.DataFrame) -> dict:
|
||||||
"""DataFrame -> JSON-safe dict."""
|
"""DataFrame -> JSON-safe dict."""
|
||||||
import math
|
import math
|
||||||
|
import re
|
||||||
safe = df.copy()
|
safe = df.copy()
|
||||||
# 处理 NaN / NaT / Timestamp / inf -> None
|
# 处理 NaN / NaT / Timestamp / inf -> None
|
||||||
for col in safe.columns:
|
for col in safe.columns:
|
||||||
@@ -103,6 +104,11 @@ def _df_to_json_payload(df: pd.DataFrame) -> dict:
|
|||||||
new_row[k] = None
|
new_row[k] = None
|
||||||
else:
|
else:
|
||||||
new_row[k] = v
|
new_row[k] = v
|
||||||
|
elif isinstance(v, str):
|
||||||
|
# 去除 ASCII 控制字符 (除 \t \n \r 外), 防止 JSON 解析失败
|
||||||
|
# 长文本字段 (如 ORG_PROFILE) 可能含 \f \v 等非标准换行
|
||||||
|
v = re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]', '', v)
|
||||||
|
new_row[k] = v
|
||||||
else:
|
else:
|
||||||
new_row[k] = v
|
new_row[k] = v
|
||||||
cleaned.append(new_row)
|
cleaned.append(new_row)
|
||||||
|
|||||||
Reference in New Issue
Block a user