首页 > 解决方案 > 将来自 http 请求的 json 响应过滤为仅特定值,然后从所有结果中选择最大的“id”值

问题描述

我有一个 Python 脚本,我想在其中使用 http get 过滤 Python,并且我想仅过滤特定值的响应数据。json响应示例如下:

{
  "id": "38",
  "name": "Report1",
  "description": "",
  "reportDefinitionID": "-1",
  "jobID": "105600",
  "type": "csv",
  "status": "Completed",
  "creator": {
    "id": "1",
    "username": "btest",
    "firstname": "bob",
    "lastname": "test"
  },
  {
  "id": "39",
  "name": "Report2",
  "description": "",
  "reportDefinitionID": "-1",
  "jobID": "113218",
  "type": "csv",
  "status": "Completed"
  "creator": {
     "id": "1",
      "username": "btest1",
      "firstname": "Bob",
      "lastname": "test1"
  },
  "id": "49",
  "name": "Report1",
  "description": "",
  "reportDefinitionID": "-1",
  "jobID": "113219",
  "type": "csv",
  "status": "Completed"
  "creator": {
     "id": "1",
      "username": "btest1",
      "firstname": "Bob",
      "lastname": "test1"
  }

我想过滤上面的 json 以仅按名称显示报告。例如,如果有一个 Python 过滤器只允许我过滤名为“Report1”的报告。如果我过滤了“Report1”的名称。我希望以下将返回:

{
  "id": "38",
  "name": "Report1",
  "description": "",
  "reportDefinitionID": "-1",
  "jobID": "105600",
  "type": "csv",
  "status": "Completed",
  "creator": {
    "id": "1",
    "username": "btest",
    "firstname": "bob",
    "lastname": "test"
  },
  "id": "49",
  "name": "Report1",
  "description": "",
  "reportDefinitionID": "-1",
  "jobID": "113219",
  "type": "csv",
  "status": "Completed"
  "creator": {
     "id": "1",
      "username": "btest1",
      "firstname": "Bob",
      "lastname": "test1"
  }

对于脚本的最后一部分,我想比较“id”字段以显示最大值,例如 id 38 和 id 49,然后在这种情况下输出 id 49 中最大值的 json。我希望它输出

},
"id": "49",
"name": "Report1",
"description": "",
"reportDefinitionID": "-1",
"jobID": "113219",
"type": "csv",
"status": "Completed"
"creator": {
   "id": "1",
    "username": "btest1",
    "firstname": "Bob",
    "lastname": "test1"
}

对于最后一部分,我只想将 id 值“49”保存到 Python 中的变量中。

到目前为止,我所拥有的是:

    response_data = response.json()

    input_dict = json.dumps(response_data)

    input_transform = json.loads(input_dict)

    # Filter python objects with list comprehensions

    sort1 = sorted([r.get("id") for r in input_transform if r.get("name") == "Report1"], reverse=True)[0]

    # Print sorted JSON

    print(sort1)

我更新了我的代码,现在我收到以下错误:

'str' object has no attribute 'get'

我对其进行了研究,但无法弄清楚我现在在做什么以及如何克服它。

标签: pythonjsonpython-3.xfilterresponse

解决方案


您需要在 listcomp 中获取 ID,如下所示:


sorted([r.get("id") for r in sample if r.get("name") == "Report1"], reverse=True)[0]


推荐阅读