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

Python遍历无根嵌套JSON对象及Scrapy环境报错排查

问题描述

我有一段如下的JSON数据,希望遍历其中的objects数组,打印每个item的object_code值:

{
  "count": 3,
  "objects": [
    {
      "object_code": "HN1059"
    },
    {
      "object_code": "HN1060"
    },
    {
      "object_code": "VO1013"
    }
  ]
}

我尝试了以下代码:

json='{"count": 3,"objects": [{"object_code": "HN1059"},{"object_code": "HN1060"},{"object_code": "VO1013"}]}'

for obj in json['objects']:
    print(obj.get('object_code'))


for obj in json[0]['objects']:
    print(obj.get('object_code'))

两种写法均报错:

TypeError: string indices must be integers

更新1

我在Scrapy类中使用建议的解决方案时仍然报错,完整报错信息:

TypeError: 'NoneType' object is not iterable

报错的完整代码:

import json
import scrapy

class MySpider(scrapy.Spider):
    name = 'mytest'
    start_urls = []

    def start_requests(self):
        s='{"count": 3,"objects": [{"object_code": "HN1059"},{"object_code": "HN1060"},{"object_code": "VO1013"}]}'
        obj = json.loads(s)
        for o in obj['objects']:
            print(o.get('object_code'))

解决方案

初始报错的修复

你犯了一个基础错误:直接把JSON字符串当作Python字典来使用。字符串只能用整数索引,不能用键名,必须先用json.loads()将JSON字符串解析为Python字典/列表后再操作。

修正后的基础代码:

import json

# 注意变量名不要用json,避免覆盖内置模块
json_str = '{"count": 3,"objects": [{"object_code": "HN1059"},{"object_code": "HN1060"},{"object_code": "VO1013"}]}'
# 解析为Python字典
data = json.loads(json_str)
# 遍历objects数组并打印object_code
for item in data['objects']:
    print(item['object_code'])  # 用item.get('object_code')可在键不存在时返回None而非报错

Scrapy场景下的问题排查

你提供的Scrapy代码逻辑本身是正确的,固定字符串s解析后obj['objects']是有效数组,不会出现NoneType不可迭代的错误。出现该报错大概率是实际场景中你并非使用固定字符串,而是从响应中获取JSON内容,可能存在以下问题:

  1. 响应内容无效:如果是从response中获取数据,确保使用response.text或response.body.decode()拿到正确的JSON字符串,若直接用response.json(),响应格式异常时会返回None。
  2. JSON格式损坏:检查实际获取的JSON内容是否完整、格式正确,比如是否有额外字符、缺失括号等,导致解析后objects字段不存在或为None。
  3. 变量误操作:确认代码中没有对s或obj做其他修改,导致obj['objects']被置为None。

如果只是测试这段固定代码,直接运行即可正常输出三个object_code值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:40:40