Отфильтруйте json ответ от HTTP-запроса только до указанного значения c, затем выберите наибольшее значение 'id' из всех результатов - PullRequest
0 голосов
/ 25 мая 2020

У меня есть сценарий Python, в котором я хотел бы отфильтровать Python с помощью http get, и я хотел бы отфильтровать данные ответа только для определенных c значений. Пример ответа 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 vs id 49 а затем выведите json для самого большого в этом случае идентификатора 49. Я бы хотел, чтобы он вывести

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

Для последней части я просто хотел бы сохранить значение идентификатора '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'

Я исследовал это и не могу понять, что делаю сейчас и как это пройти.

1 Ответ

0 голосов
/ 25 мая 2020

Вам необходимо получить идентификатор в списке comp, как показано ниже:


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

...