【问题标题】:load an object if a key contains a specific value (month)如果键包含特定值(月),则加载对象
【发布时间】:2021-02-13 18:19:16
【问题描述】:

有没有办法只加载包含来自 json 的特定键值的对象?

我所做的步骤:

response = requests.get(URL, headers={'token': TOKEN}, verify=False)
meta_json = json.loads(response.content)

meta_json 看起来像这样:

{
      "count": 264428,
      "data": [
        {
          "calculation_date": "2020-04-09T12:33:05.814107",
          "name": "Felix",
          "age": 12
        },
        {
          "calculation_date": "2020-03-09T12:33:05.814107",
          "name": "Max",
          "age": 18
        },
        {
          "calculation_date": "2020-04-09T12:33:15.814207",
          "name": "John",
          "age": 25
        }
    ],
      "links": {
        "first": "random",
        "last": "second"
      }
    }

但我只想查看四月,meta_json 应该是这样的:

{
      "count": 264428,
      "data": [
        {
          "calculation_date": "2020-04-09T12:33:05.814107",
          "name": "Felix",
          "age": 12
        },
        {
          "calculation_date": "2020-04-09T12:33:15.814207",
          "name": "John",
          "age": 25
        }
    ],
      "links": {
        "first": "random",
        "last": "second"
      }
    }

如何做到这一点?

【问题讨论】:

  • meta_json = {k: v if k != "data" else [i for i in v if datetime.fromisoformat(i["calculation_date"]).month == 4] for k, v in meta_json.items()}。文档:fromisoformat()。顺便说一句,你可以使用response.json()

标签: python json get load


【解决方案1】:

您可以在加载后过滤结果,如下所示:

meta_json['data']=[i for i in meta_json['data'] if '-04-' in i.get('calculation_date', '')]

【讨论】:

  • 我得到一个 KeyError: 'calculation_date' 正好在这段代码所在的那一行
  • @Davidoff,将i['calculation_date'] 替换为i.get('calculation_date', '')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 2020-11-13
  • 2023-04-01
  • 2020-05-08
  • 2019-04-29
  • 2015-08-11
相关资源
最近更新 更多