吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1434|回复: 10
收起左侧

[求助] python json数据处理求解答

[复制链接]
ForGot_227 发表于 2021-3-5 15:01
本帖最后由 ForGot_227 于 2021-3-9 11:48 编辑

起因呢,我很久以前用的一个工具更新了,之前用的是docker最新版本,但后来更新之后数据什么都变了,需要重新开发,但目前我只负责修复,只能找回原本的镜像。
我打算根据images id去匹配原先的版本,但版本号太多了,所以想抓一遍。

在获取到数据之后,使用json() 改为 dict ,然后想用for循环去加载,但始终加载不了,一直提示“TypeError: string indices must be integers” 字符串索引必须是整数
不知道怎么解决,有哪位大哥可以教一下

[Python] 纯文本查看 复制代码
 r = requests.get(w_next)
d = r.json()
for dc in d:
    adc = dc['next']
     print(adc)



直接打印所有结果
微信图片_20210305153503.png
看了下C的值,是不是要重新改成数组或者字典才能使用?

------------------
3-9 编辑  已解决。 下面附上写的代码,第一次尝试写这个,若很差,烦请指点下。
主要作用,抓取 docker 某镜像的所有版本和sha256的值,因为images id是sha256的前几位,我仅用来看以前用过的是那个版本。

[Python] 纯文本查看 复制代码
# -*- coding:utf-8 -*-

import requests
import time

"""变量"""
tag = 'rasa/rasa-x'   #docker image name
file = 'F:\\\\python\\rasa-x.txt'    #写入文件,目前仅TXT,其他格式自行修改
w_next = 'https://hub.docker.com/v2/repositories/'+tag+'/tags/?page_size=25&page=1&ordering=last_updated' #拼接接口地址
"""代码"""
file_handle=open(file, mode='w')   #打开文件
while bool(w_next):             #判断是否有下一页,false则结束
    r = requests.get(w_next)
    w_datas = r.json()
    w_next = w_datas['next']
    print(w_next)
    w_results = w_datas['results']

    for datas in w_results:
        if datas['images'] != []:         #避免 images为空报错
            data = datas['images'][0]
            tagdigest = data['digest']
        else:
            tagdigest = ''
        tagname = datas['name']
        write_text = "版本:" + tagname + "   " + tagdigest + '\n'    #写入文本编辑
        file_handle.write(write_text)              #写入文件
        #print(write_text)
    time.sleep(5)
file_handle.close()                          #关闭文件


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wanglaihuai 发表于 2021-3-5 15:07
dc  是字符串,所以dc['next']报错啊。你再看一下get回来的数据格式。
ogli324 发表于 2021-3-5 15:12
ogli324 发表于 2021-3-5 15:15
你应该直接查看返回数据, 并按照json操作方式取值, 不要盲目干。
r = requests.get(w_next)
print(r.text)

# json取值 示例,不会的,百度 菜鸟教程
data = r.json()
xxx= data["xxx"]
ciker_li 发表于 2021-3-5 15:26
把d,dc都print一下看看
 楼主| ForGot_227 发表于 2021-3-5 15:29
wanglaihuai 发表于 2021-3-5 15:07
dc  是字符串,所以dc['next']报错啊。你再看一下get回来的数据格式。

回来的数据是json
 楼主| ForGot_227 发表于 2021-3-5 15:37
ciker_li 发表于 2021-3-5 15:26
把d,dc都print一下看看

我把图编辑上去了,是不是在循环里还要重新改成json格式的才能用
seagulles 发表于 2021-3-5 16:02
首先你的输出我没看明白,
1、dict类型数据,按你图中的for  dc in d 是打印不出来元组类型的数据的,应该是 for dc in d.items()
2、按照你给的图显示,你应该直接d['next']取值
ciker_li 发表于 2021-3-5 16:18
d是字典
dc就是你想要遍历的内容吧
把adc那行去了,直接print(dc),应该就是遍历d了
如果只想看next内容,可以用d['next']
ufo0033 发表于 2021-3-5 17:50
本帖最后由 ufo0033 于 2021-3-5 17:51 编辑

看下出错的是那一行数据
[Python] 纯文本查看 复制代码
for dc in d:
    try:
        adc = dc['next']
        print(adc)
    except:
        print('出错行--',dc)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 07:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表