如何向嵌套字典结构的JSON中追加指定日志条目?
报错原因
触发need integer not str类型错误的核心是数据层级索引使用错误:你操作的最外层结构是Python列表,列表仅支持整数/切片索引,你大概率是直接对最外层列表传入字符串作为键查找值(例如直接写ct_logs["DigiCert"]),才触发的类型报错。
可行实现方案
你的数据层级非常清晰:
- 最外层:列表,每个元素为证书运营商字典,固定包含
name(运营商名称,字符串)、logs(该运营商下CT日志列表)两个键 - 运营商字典下的
logs字段:列表,每个元素为单条CT日志字典,固定包含description、log_id两个键
基础实现代码
先定义待补充的日志参数,假设你解析完成的CT日志数组变量名为ct_logs:
# 待补充的日志属性 log_id = "some_log_Id" log_description = 'Digicert named log' operator_name = 'DigiCert' # 遍历匹配目标运营商分组 for operator in ct_logs: # 注意名称大小写要和现有数据完全匹配,现有数据中运营商名是"DigiCert"(C大写) if operator["name"] == operator_name: # 向对应分组的logs列表追加新日志条目 operator["logs"].append({ "description": log_description, "log_id": log_id }) break
兼容版本(自动创建缺失分组)
如果后续数据变动导致DigiCert分组不存在,可以加判断自动新建分组,避免匹配失败:
target_group = None # 查找目标分组 for operator in ct_logs: if operator["name"] == operator_name: target_group = operator break # 未找到分组则新建 if not target_group: target_group = { "name": operator_name, "logs": [] } ct_logs.append(target_group) # 追加新日志 target_group["logs"].append({ "description": log_description, "log_id": log_id })
常见错误写法避坑
以下是触发该类报错的典型错误写法,注意规避:
# 错误1:直接对最外层列表用字符串键索引 ct_logs["DigiCert"]["logs"].append(...) # 最外层是列表,不支持字符串作为索引 # 错误2:层级取值错误,把logs列表当成字典操作 for operator in ct_logs: operator["logs"]["description"] = log_description # logs是列表,不能直接用字符串键取description
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

