You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何用re.sub将HJSON无引号字符串转为合法JSON

正则修复无引号JSON值实现方案

针对hjson库在Heroku平台部署崩溃的问题,直接通过正则替换给不合法的无引号值补全双引号,再用标准库json.loads解析即可,不需要引入第三方依赖。

正则规则说明

匹配模式为 r':\s*([A-Za-z]+)\s*([,}])',各部分含义:

  • :\s*:匹配键值对的冒号,以及冒号后任意数量的空白字符(兼容不同缩进、空格格式)
  • ([A-Za-z]+):捕获连续纯字母组成的无引号值(即AAPL这类任意字母组合的标的代码)
  • \s*([,}]):匹配值后面的任意空白,以及值结尾的逗号或闭合大括号(兼容最后一个字段无逗号的场景)

替换字符串为 r': "\1"\2',作用是给捕获到的纯字母值前后补双引号,同时保留原有的逗号/大括号分隔符,不会破坏原JSON结构。

修改后的可用代码

import re
import json
from flask import Flask, request

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    # 将请求字节流转为字符串
    raw_content = request.data.decode('utf-8')
    # 替换补全无引号值的双引号
    valid_json = re.sub(
        r':\s*([A-Za-z]+)\s*([,}])',
        r': "\1"\2',
        raw_content
    )
    # 正常解析标准JSON
    webhook_message = json.loads(valid_json)
    symbol = webhook_message['ticker']
    # 后续业务逻辑自行补充
    return "success"

适配说明

  • 当前规则不会误改原本就带双引号的合法字段,比如示例中的passphrase、orderAction字段都能正常解析
  • 如果后续需要兼容其他无引号值(比如示例中未加引号的ISO格式时间2022-07-03T01:56:07Z),只需要把捕获组的匹配范围调整为([A-Za-z0-9\-:T]+)即可覆盖时间格式场景
  • 整个逻辑只使用Python标准库,不存在第三方依赖在Heroku环境的兼容问题,不会出现无原因崩溃的情况

内容的提问来源于stack exchange,提问作者MouseWarrior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:24:30