【问题标题】:Selecting fields from JSON, based on fields names and values根据字段名称和值从 JSON 中选择字段
【发布时间】:2019-04-12 06:29:25
【问题描述】:

在 python 中,我从 API 调用中获取 JSON。

resp = requests.get(url)
resp.json()

我将使用我的 MySQL 词汇表。 我得到的这个对象很大,结构不规则(并非所有字段都可用于每个条目)。

所以我想在这个 JSON 中根据值选择一些字段和一些条目。 假设 JSON 返回用户的个人资料,包括 "name""email""age" 字段。

我想创建一个新的小型 JSON:

  • 只有一个“电子邮件”字段 - 我们会删除没有电子邮件字段的条目。
  • 仅当"age" = 15

虽然在 SQL 中我会在 30 秒内完成,但我还没有找到如何在 Python 中完成...

【问题讨论】:

  • 使用for循环,测试列表中的条目是否符合您的条件,并将其添加到结果列表中。
  • if "email" in entry and entry["age"] == 15: ...
  • 你可能想要jmespath filter
  • 您能更明确地说明要使用的代码吗?很明显,我需要一个循环来查看条目,以及一个 if。但它并没有告诉我语法是什么。谢谢
  • @Barmar 我看不到与您提到的重复主题的联系。不同的情况。

标签: python json select


【解决方案1】:

您能否列出对它的理解 - 我认为语法与 SQL 最相似

[obj for obj in res.json() if obj.email is not None and obj.age=="15"]

或使用更多功能的方法

def yourCustomFilter(obj):
    return obj.email is not None and obj.age=="15"

filter(resp.json(), yourCustomFilter)

或者简单的每个循环

filteredObjects = []
for obj in resp.json():
    if obj.email is not None and obj.age=="15":
        filteredObjects.append(obj)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    相关资源
    最近更新 更多