38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
from common import write_json_atomic
|
|
|
|
|
|
def load_json_input(path: Path) -> Any:
|
|
if not path.exists():
|
|
raise FileNotFoundError(f"未找到输入 JSON 文件: {path}")
|
|
try:
|
|
return json.loads(path.read_text(encoding="utf-8-sig"))
|
|
except json.JSONDecodeError as exc:
|
|
raise ValueError(f"输入文件不是合法 JSON: {path}") from exc
|
|
|
|
|
|
def write_large_json(input_path: Path, output_path: Path) -> None:
|
|
data = load_json_input(input_path)
|
|
write_json_atomic(output_path, data, indent=2, ensure_ascii=False)
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--input", required=True, help="UTF-8/UTF-8-SIG JSON 源文件路径")
|
|
parser.add_argument("--out", required=True, help="目标 JSON 文件路径")
|
|
args = parser.parse_args()
|
|
|
|
input_path = Path(args.input).resolve()
|
|
output_path = Path(args.out).resolve()
|
|
write_large_json(input_path, output_path)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|