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

求助:如何将非标准JSON格式字符串转为Python可使用的字典?

解决不规范类JSON转Python字典的问题

嘿,我之前也碰到过这种返回非标准JSON的接口,给你两个实用的解决思路:

方法一:用demjson库解析宽松格式JSON

demjson专门用来处理这种不严格的JSON格式(比如键没有双引号、末尾多逗号这类问题),非常省心。

步骤:

  1. 先安装库:
pip install demjson
  1. 修改你的代码,用demjson.decode()替代标准的json.loads():
import requests
import demjson

def test():
    url = "http://www.sgx.com/JsonRead/JsonstData"
    payload = {
        'qryId': 'RSTIc',
        'timeout': 60
    }
    headers = {
        'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'
    }
    response = requests.post(url, data=payload, headers=headers)
    # 解析不规范的类JSON
    parsed_data = demjson.decode(response.text)
    print(type(parsed_data))  # 输出 <class 'dict'>,就是标准Python字典了

方法二:用正则手动补全双引号(无需第三方库)

如果不想额外安装库,可以用正则表达式给所有缺少双引号的键加上引号,再用标准json库解析。

修改后的代码示例:

import requests
import json
import re

def test():
    url = "http://www.sgx.com/JsonRead/JsonstData"
    payload = {
        'qryId': 'RSTIc',
        'timeout': 60
    }
    headers = {
        'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'
    }
    response = requests.post(url, data=payload, headers=headers)
    # 用正则给键加上双引号(适配字母、数字、下划线组成的键)
    fixed_json = re.sub(r'([a-zA-Z0-9_]+):', r'"\1":', response.text)
    # 现在可以用标准json库解析了
    parsed_data = json.loads(fixed_json)
    print(type(parsed_data))

注意:这个正则只适用于键是字母、数字、下划线的情况,如果接口返回的键包含特殊字符,可能需要调整正则规则。

两种方法里,我更推荐第一种,demjson能处理更多边缘情况,比如字符串里包含冒号、单引号替代双引号这类问题,容错率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:07:28