Python: 壞 JSON 修補教學 json_repair .loads( bad_json_text )

加入好友
加入社群
Python: 壞 JSON 修補教學 json_repair .loads( bad_json_text ) - 儲蓄保險王

這份教學示範如何對「看起來像 JSON、但其實不合法」的 OCR sidecar 內容做三段式處理:

1. 先嘗試 `json.loads`

2. 失敗後再嘗試 `json_repair`

3. 若仍失敗,最後保留原始字串 `raw_string_fallback`

這個順序的目的,是讓原本已經合法的 JSON 完全不被多餘修補;只有在標準解析失敗時,才啟用 best-effort repair。

## Install

pip install json-repair

## A Simplified Broken Example

下面這段內容故意保留兩個常見問題:

– 少了最外層 `{}`

– 結尾多一個逗號

bad_json_text = '''
"step_01": {
    "class_name": "DemoProcessStep",
    "action": {
        "bypass": "false"
    },
},
'''.strip()

## Standard Parse First, Then Repair

import json
import json_repair

try:
    ocr_json_best_effort = json.loads(bad_json_text)
    ocr_json_parse_stage = "json.loads"
except json.JSONDecodeError:
    try:
        ocr_json_best_effort = json_repair.loads(bad_json_text)
        ocr_json_parse_stage = "json_repair"
    except Exception:
        ocr_json_best_effort = bad_json_text
        ocr_json_parse_stage = "raw_string_fallback"

print("parse_stage =", ocr_json_parse_stage)
print(type(ocr_json_best_effort).__name__)
print(ocr_json_best_effort)

## Expected Outcome

在這個例子中:

– `json.loads` 會失敗

– `json_repair` 會成功

– `ocr_json_parse_stage` 會是 `json_repair`

輸出通常會是修補後的 Python `dict`,例如:

parse_stage = json_repair
dict
{‘class_name’: ‘DemoProcessStep’, ‘action’: {‘bypass’: ‘false’}}

Python: 壞 JSON 修補教學 json_repair .loads( bad_json_text ) - 儲蓄保險王

## Recommended Field Contract

如果你要把這套流程存進主輸出 JSON,建議欄位分成三個:

– `ocr_json_raw`: 原始 OCR sidecar 文字

– `ocr_json_best_effort`: 經 `json.loads -> json_repair -> fallback` 後的最終表示

– `ocr_json_parse_stage`: 記錄最後命中的解析階段,值可能是 `json.loads`、`json_repair`、`raw_string_fallback`

這樣可以同時保留:

– 原始證據

– 可用的最佳努力物件

– 修補可信度資訊

推薦hahow線上學習python: https://igrape.net/30afN

加入好友
加入社群
Python: 壞 JSON 修補教學 json_repair .loads( bad_json_text ) - 儲蓄保險王

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *