Как мне удалить все «» из ответа API в Python?

#python #python-3.x

#python #python-3.x

Вопрос:

Я извлекаю огромный список политик из программы, использующей API на Python.

Когда я извлекаю их с помощью:

     response = requests.request("GET", url, headers=headers, data=payload)
    if response.status_code != 200:
        print(response.text)
        print("Invalid Response")
        sys.exit(1)
    return response.json()
  

В некоторые значения метаданных добавлены символы.

например, в программе имя политики — «Обеспечить использование учетной записи «root» …» Но в ответе оно представлено как:

 "name": 'Ensure the "root" account usage...', 
  

Как вы можете видеть, добавляются два » «.

Теперь, когда я пытаюсь использовать другой API для повторного создания этой политики в программе, он отклоняет ее из-за «».

Ответ представляет собой список словарей. Словари содержат несколько полей метаданных, например, имя (как видно), описание, рекомендации и т.д. в котором возникает эта проблема.

Вопрос: Как я могу перебрать свой список словарей в ответе и удалить все «» или есть лучший способ сделать это?

Приветствия!


Обновление: пример ответа API с удаленными данными

 [
  {
    "policyId": "text",
    "name": "text",
    "policyType": "text",
    "policySubTypes": [
      "text"
    ],
    "systemDefault": boolean,
    "description": "text.",
    "severity": "text",
    "rule": {
      "name": "text",
      "criteria": "text",
      "parameters": {
        "savedSearch": "text"
      },
      "type": "text"
    },
    "recommendation": "text u00a0 u00a0 text u00a0 text"
    "cloudType": "",
    "complianceMetadata": {
      "standardName": "text",
      "standardDescription": "text",
      "requirementId": 1,
      "requirementName": "text",
      "sectionId": "text",
      "sectionDescription": "text",
      "complianceId": "text",
      "policyId": "text/number",
      "systemDefault": "boolean",
      "customAssigned": "boolean"
    },
    "labels": [
      "text"
    ],
    "enabled": boolean,
    "deleted": boolean,
    "remediable": boolean
  },
]
  

Ответ №1:

Просто сделайте замену на newstr = oldstr.replace("\", "") .

Для циклического просмотра списка словарей:

 for dic in dic_list:
  for k,v in dic.items():
    if isinstance(v, str):
       dic[k] = v.replace("\", "")
  

Комментарии:

1. Я не могу использовать .replace, потому что «» является escape-символом? Он выдает ошибки, если я пытаюсь .replace(«»,»»)

2. @RyanBrown Если вы считаете, что в строке действительно есть буквальное «», это .replace("\", '') должно сработать…

3. Итак, я попробовал это, заменив «dic_list» на переменную «список словарей», но я столкнулся с этим: AttributeError: объект ‘list’ не имеет атрибута ‘replace’

4. Структура данных может отличаться от того, что вы описали тогда… значения вашего словаря могут быть списками, а не просто строками — добавьте этот цикл.

5. Я обновил OP примером структуры с удаленными данными. Эта структура словаря реплицируется много раз в списке. Обратите внимание, я также получаю эти u00a0 и т. Д. И другие странные символы