【问题标题】:parse query string where value has "&"解析值具有“&”的查询字符串
【发布时间】:2020-04-06 17:36:05
【问题描述】:
我正在处理第三方套接字 API,我在其中获取字符串响应并将其转换为 JSON。
示例:
id=1000&name=Foo Bar
我已经尝试过split('&') 和parse_qsl 以获得结果(作为键、值)。问题是某些记录的值包含&
示例
id=1000&name=Foo Bar & Bros
所以& Bros 将被视为空值。知道如何将其解析为名称键的一部分吗?
【问题讨论】:
标签:
python
regex
parsing
query-string
【解决方案1】:
有趣。问题是具有“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'}