Python是否将所有“可用”元素保存在Json中,并在所有搜索完成后打印?

2024-09-24 22:32:56 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我一直在使用json进行abit工作,并从根本上提高了对json的认识

我想做的是,我把所有这些可用的数字保存在一个列表上,或者你可能想到的任何东西上

Json:

{
    "threads": [
        {
            "seoTitle": "trucks",
            "other_crap": "it's a fox!"
        },
        {
            "seoTitle": "rockets",
            "other_crap": "i'm rocket man"
        },
        {
            "seoTitle": "helicopter",
            "other_crap": "for 007",
            "skus": [
                {
                    "Number": "7",
                    "available": true
                },
                {
                    "Number": "7.5",
                    "available": true
                },
                {
                    "Number": "8",
                    "available": false
                },
                {
                    "Number": "8.5",
                    "available": true
                },
                {
                    "Number": "9",
                    "available": true
                },
                {
                    "Number": "9.5",
                    "available": false
                },
                {
                    "Number": "10",
                    "available": true
                },
                {
                    "Number": "10.5",
                    "available": false
                },
                {
                    "Number": "11",
                    "available": true
                },
                {
                    "Number": "11.5",
                    "available": false
                },
                {
                    "Number": "12",
                    "available": true
                },
                {
                    "Number": "12.5",
                    "available": false
                },
                {
                    "Number": "13",
                    "available": true
                }
            ],
            "restricted": false,
            "subtitle": "Stackoverflow"
        }
    ]
}

正如您从Json文件中看到的,这里有SKU,下面有不同的编号和可用编号,我想做的是根据是否可用来打印所有编号,意思是如果可用,则打印出来或保存到列表中,然后在有可用时打印出来搜索所有,如果不可用,则直接跳到下一个。-这就是我的目标——问题是,我不知道我应该通过json文件做什么,我如何才能使它成为可能,以便它知道根据可用将什么保存到列表中

1)您的预期输出是什么,

我预期的输出可能如下所示:

helicopter
for 007
7
7.5
8.5
9
10
11
12
13

2)到目前为止您已经尝试过的,

现在我只打印出了seoTitle和其他废话

print(threads['seoTitle'])
print(threads['other_crap'])

3)为什么您尝试的方法无效

我试着做一个for循环,但我完全失败了

for element in threads['skus']:
    if element not 'available'

基本上失败了:/

我正在使用的代码:

old_list = []

while True:
    try:
        resp = requests.get(url)
        new_list = resp.json()['threads']

        for item in new_list:
            if item['seoTitle']not in old_list:
                try:


                    print(item['seoTitle']) 
                    print(item['other_crap']) 


                    itemskus = item.get('skus', {})
                    if itemskus:
                        for element in item['skus']:
                            print(element)
                    else:
                        print('Item skus could not be found')


                    old_list.append(['seoTitle'])



                except Exception as e:
                    print(e)
                    print("ERROR")
                    time.sleep(5)
                    continue


        else:
            randomtime = random.randint(4, 60)
            time.sleep(randomtime)


    except Exception as e:
        continue

现在,这是我的输出:

helicopter
for 007
{"Number": "7", "available": true }
{"Number": "7.5", "available": true }
{"Number": "8", "available": false }
{"Number": "8.5","available": true }
{"Number": "9", "available": true}
{"Number": "9.5", "available": false}
{"Number": "10", "available": true}
{"Number": "10.5", "available": false }
{"Number": "11", "available": true}
{"Number": "11.5","available": false }
{"Number": "12","available": true }
{"Number": "12.5", "available": false}
{"Number": "13", "available": true }

Tags: jsonfalsetruenumberforelementitemlist
1条回答
网友
1楼 · 发布于 2024-09-24 22:32:56

首先,需要将json导入python dict。假设您的文件名为my_sample.json,那么您就可以这样做了

import json
with open('my_sample.json') as f:
    sample = json.load(f)

现在,sample是一个包含json数据的dict。您希望访问线程列表中第三个线程的skus,前提是该线程可用。您可以通过创建以下列表来实现这一点

available_skus = [float(d['Number']) for d in sample['threads'][2]['skus'] if d['available']]

然后打印你需要的

print(sample['threads'][2]['seoTitle'])
for el in available_skus:
    print(el)

输出

helicopter
7
7.5
8.5
9
10
11
12
13

编辑

如果不确定skus信息始终位于第三个线程上,则可以用以下内容替换available_skus

available_skus = [d['Number'] for thread in sample['threads'] if 'skus' in thread.keys() for d in thread['skus'] if d['available']] 

相关问题 更多 >