JSON文件非空但Python脚本读取报JSONDecodeError错误
JSONDecodeError 问题排查与解决
错误信息
raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
配置文件(有效)
{ "credentials": { "server": "0.1.2.3,6666", "database": "db", "username": "user", "password": "password" } }
问题分析与修正
你的脚本存在三个核心错误:
错误1:文件指针被移到末尾
你先调用了lines=config_file.readlines(),这会把文件读取指针移动到文件末尾,后续json.load(config_file)读取时,文件已无内容,导致解析空字符串触发错误。直接删除readlines()这一行即可。错误2:混淆文件对象与解析后的字典
你试图从文件对象config_file中取字段值,这是完全错误的。解析后的JSON数据存储在df变量中(建议重命名为config更清晰),且所有凭证字段嵌套在credentials键下,必须通过config['credentials']访问。错误3:字符串拼接不安全
用+拼接数据库连接字符串存在安全隐患(比如字段含特殊字符时会报错),改用f-string拼接更可靠。
修正后的脚本
import pandas as pd import datatest as dt import datetime import json import pyodbc # 直接读取并解析JSON配置,无需readlines with open(r"path_to_config.json", 'r') as config_file: config = json.load(config_file) # 从嵌套的credentials字典中提取参数 credentials = config['credentials'] server = credentials['server'] database = credentials['database'] username = credentials['username'] password = credentials['password'] # 用f-string安全拼接连接字符串 connection = pyodbc.connect( f'DRIVER={{ODBC Driver 17 for SQL Server}};' f'SERVER={server};' f'DATABASE={database};' f'UID={username};' f'PWD={password};' ) cursor = connection.cursor() SQL_STATEMENT = "SELECT COUNT(*) FROM table1" cursor.execute(SQL_STATEMENT) for i in cursor: print(i)
内容的提问来源于stack exchange,提问作者tula_fan
相关产品推荐
相关产品推荐

