Как проверить тело запроса JSON перед отправкой запроса PUT в python - PullRequest
0 голосов
/ 29 октября 2019

Когда я отправляю запрос PUT на мою конечную точку API из python с телом запроса JSON, я получаю пустое тело запроса, потому что иногда он содержит специальные символы, которые не поддерживаются JSON.

Как выполнить санитарную обработкумой JSON перед отправкой запроса?

Я пытался с помощью stringify и синтаксического анализа json перед отправкой запроса!

profile = json.loads(json.dumps(profile))

Мой пример недействительного json:

{
    "url": "https://www.example.com/edmund-chand/",
    "name": "Edmund Chand",
    "current_location": "FrankfurtAmMainArea,   Germany",
    "education": [],
    "skills": []
}

и мой ожидаемый подтвержденный JSON должен быть:

{
    "url": "https://www.example.com/edmund-chand/",
    "name": "Edmund Chand",
    "current_location": "Frankfurt Am Main Area, Germany",
    "education": [],
    "skills": []
}

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Если вы ищете что-то быстрое для очистки данных json для ограниченных полей, например current_location, вы можете попробовать что-то вроде следующего:

def sanitize(profile):

    profile['current_location'] = ', '.join([val.strip() for val in profile['current_location'].split(',')])

    return profile

profile = sanitize(profile)

Идея в том, что вы бы написали код для очисткикаждый бит в этой функции и отправьте ей свое API или исключение в случае недопустимости и т. д.


Для более надежной проверки вы можете использовать пакет jsonschema. Подробнее здесь .

С помощью этого пакета вы можете более гибко проверять строки и схему json.

Пример взят из пакета readme:

from jsonschema import validate

# A sample schema, like what we'd get from json.load()
schema = {
     "type" : "object",
     "properties" : {
        "url" : {"type" : "string", "format":"uri"},
        "current_location" : {"type" : "string", "maxLength":25, "pattern": "your_regex_pattern"},
     },
}

# If no exception is raised by validate(), the instance is valid.
validate(instance=profile, schema=schema)

Вы можете найти более подробную информацию и типы доступных проверок для строк здесь .

0 голосов
/ 29 октября 2019

Спасибо @Rithin за ваше решение, но оно кажется более связанным с одним полем всего JSON.

Я нашел решение заменить его приведенным ниже примером кода, который работает для любого поля:

profile = json.loads(json.dumps(profile).replace("\t", " "))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...