繁体   English   中英

如何在 3 次迭代中过滤某个 JSON 响应

[英]How to filter for a certain JSON response within 3 iterations

params = {
    'direction': 'desc',
    'page': '1',
    'sort': 'created_at',
    'perPage': '100'
}

response = requests.get('/ledger', params=params, cookies=cookies, headers=headers)

data = response.json()

payouts = [result['category'] for result in data['results']]
final = [result['debitCents'] for result in data['results']]
status = [result['status'] for result in data['results']] 
date = [result['createdAt'] for result in data['results']]

if status == "requested":
    for (x, y, z) in zip(final, date, status):
        print(f'Payout => {x/100:.2f} | Date => {y}  | Status => {z}')
else:
    pass

JSON 有一些我想过滤的可能性

  1. "status": null
  2. "status": "requested"
  3. "status": "success"

我只想打印 3 个"requested" ,我必须遍历 JSON 的每个部分并找到它。 它不会打印,但当我删除 if 语句时请求有效。 我该如何格式化

您没有提供示例,但可以从您的代码中推断出接收到的数据的数据结构:

{
  "results": [
    {
      "category": "some category",
      "debitCents": 2,
      "status": null,
      "createdAt": "2022-07-01"
    },
    {
      "category": "some category",
      "debitCents": 3,
      "status": "requested",
      "createdAt": "2022-07-02"
    },
    {
      "category": "some category",
      "debitCents": 4,
      "status": "success",
      "createdAt": "2022-07-03"
    }
  ]
}

您正在遍历数据 4 次,以提取 4 个值列表(尽管您不使用payouts / category ,所以我也会忽略它)。

但是,实际上没有必要首先构建这些列表,然后 zip 将它们重新组合在一起,如果您需要的只是遍历它们并使用您感兴趣的列表( "requested"列表)。

此外,您检查"status"的值,然后期望zip()以某种方式知道哪些元组要包含在 zip 中,哪些要忽略,哪些是行不通的(您如何期望它知道要包含什么? )

这里有一些代码可以做你想做的事情:

# leaving out the first bit, just assuming you got the data and it is structured as above

for result in data['results']:
    if result["status"] == "requested":
        print(f'Payout => {result["debitCents"]/100:.2f} '
              f'| Date => {result["createdAt"]}' 
              f'| Status => {result["status"]}')

仅此而已,不需要其他任何东西。 如果你希望你的代码做更多的事情,你应该把问题集中在这个问题上(或者可能写一个新的,更有针对性的)。

编写代码时,仅当您知道它们的作用以及它们为何位于它们所在的位置时才使用命令。如果您将您认为“可能有帮助”的命令串起来,您的代码几乎可以肯定要么不起作用,要么或有意想不到的副作用。

我写的代码:

  • 循环遍历data['results'] ,假设它是像列表这样的序列
  • 对于每个result ,检查状态是否为"requested"
  • 并且只有在这种情况下,才打印出类似result值的格式

一般来说,如果您想要一个最有用的答案,您应该在 StackOverflow 上包含一些示例数据和您的问题,并提供一个非常清楚的解释,说明您得到了什么和您期望什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM