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

解析JSON文件时遭遇TypeError: string indices must be integers, not str错误求助

解决TypeError: string indices must be integers, not str(JSON解析时host字段为字符串的问题)

我之前也踩过这个一模一样的坑!这个错误的核心逻辑很简单:你代码里默认把host字段当成了字典/对象来访问(比如写了host["ip"]或者host["address"]这种代码),但实际你的JSON文件里,host是一个普通的字符串类型(比如"host": "192.168.0.1"),字符串只能用整数索引(比如host[0]取第一个字符),所以才会抛出这个错误。

下面给你分场景的解决思路:

第一步:先确认JSON里的host字段真实结构

先在代码里加一行打印,看看host到底是什么:

import json

with open("your_json_file.json", "r") as f:
    data = json.load(f)
print("host字段的类型:", type(data["host"]))
print("host字段的内容:", data["host"])

运行后如果输出是<class 'str'>,那确实是字符串,接下来看两种场景:


场景1:JSON数据本身不符合预期

如果这个JSON是你自己维护的,或者是合作方提供的错误数据:

  • 直接修改JSON文件,把host改成你需要的字典结构,比如:
    错误写法:
    {
      "host": "example.com"
    }
    
    改成正确的结构(根据你的需求调整字段):
    {
      "host": {
        "address": "example.com",
        "port": 443
      }
    }
    
  • 如果是第三方接口返回的错误数据,优先联系接口方修复;如果暂时没法改,就做兼容处理(看场景2)。

场景2:代码解析逻辑出错,或者需要兼容字符串格式的host

如果有时候host是字符串,有时候是字典,或者你误把嵌套层级搞错了:

  • 先检查你的索引路径:比如你是不是应该访问data["server"]["host"],结果写成了data["host"],而data["host"]刚好是个字符串?
  • 如果需要兼容两种格式,写个判断逻辑:
    host_data = data.get("host")
    if isinstance(host_data, str):
        # 把字符串当成主机地址,用默认端口
        host_address = host_data
        host_port = 80
    elif isinstance(host_data, dict):
        # 从字典里取需要的字段
        host_address = host_data.get("address")
        host_port = host_data.get("port", 80)  # 没port字段就用默认80
    else:
        raise ValueError("host字段的类型既不是字符串也不是字典,无法解析")
    

特殊情况:host是字符串格式的JSON

如果你的host字段是一个被引号包裹的JSON字符串(比如"host": "{'ip': '1.1.1.1', 'port': 80}"),那你需要把这个字符串再解析一次:

import json

host_str = data["host"]
# 先把单引号转双引号(JSON要求双引号),再解析成字典
host_dict = json.loads(host_str.replace("'", "\""))
# 之后就可以正常用host_dict["ip"]访问了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:31:07