разбирать строку запроса, где значение имеет "&" - PullRequest
0 голосов
/ 06 апреля 2020

Я имею дело со сторонним API сокетов, где я получаю строковый ответ и преобразую его в JSON.

пример:

id=1000&name=Foo Bar

Я попытался split('&') и parse_qsl, чтобы получить результаты (как ключ, значение). Проблема в том, что для некоторых записей значение содержит &

пример

id=1000&name=Foo Bar & Bros

, поэтому & Bros будет считаться пустым значением. Любая идея о том, как проанализировать его как часть ключа имени?

1 Ответ

0 голосов
/ 06 апреля 2020

Интересно. Проблема в том, что строка со значением «Foo Bar & Bros» не является допустимой строкой запроса; пробелы и (текстовый) амперсанд должны быть закодированы.

Но, предположив, что 1) «API сокетов сторонних производителей», о котором вы упомянули, предоставляет их вам в этой ломаной форме, и 2) текстовые амперсанды всегда имеют пробел вокруг них, вы можете сделать это следующим образом. :

def handle_ampersand_values(pseudo_querystring):
    ENCODED_TEXTUAL_AMPERSAND = " AMPERSAND "
    RAW_TEXTUAL_AMPERSAND = " & "
    encoded_ampersands = pseudo_querystring.replace(RAW_TEXTUAL_AMPERSAND, ENCODED_TEXTUAL_AMPERSAND)
    kv_segments = encoded_ampersands.split("&")
    kv_pairs = [segment.split("=") for segment in kv_segments]
    return {k: v.replace(ENCODED_TEXTUAL_AMPERSAND, RAW_TEXTUAL_AMPERSAND) for k, v in kv_pairs}

print(handle_ampersand_values("id=1000&name=Foo Bar & Bros"))
{'id': '1000', 'name': 'Foo Bar & Bros'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...