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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:30:54