Json 类似的响应未被 Python 识别
Json-like response not recognized by Python
我收到了 urllib3 的响应(也尝试过请求),对其进行解码并接收到 json.loads、
这是用 decode('utf-8')
解码后的数据,我想将其作为 json:
json_thing = b'{\n"stuff": {\n"a": "1",\n"b": "2",\n"d": "3",\n"e": "4",\n"f": "5",\n"g": "",\n"h": "8",\n"i": "9",\n"j": "10",\n"k": "",\n"l": "13",\n"m": "",\n"n": "",\n"o": "",\n"p": [{\n"q":\xc2\xa0"19",\n"r": 1\n}],\n"s": "Jan 1, 2020 1:44 pm",\n"t": "Jan 1, 2020 1:44 pm"\n}\n}'
但我总是出错
raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 18 column 14 (char 482)
看的时候,在"r":之后只有一个正整数,在"q"处有\xc2\xa0,是不是需要先把它清理掉?
问题出在 "q":\xc2\xa0"19",\n
中的 non-breaking space 字符。
解码后反序列化前替换:
>>> json.loads(json_thing.decode('utf-8').replace('\N{NO-BREAK SPACE}', ' '))
{
'stuff': {
'a': '1',
'b': '2',
'd': '3',
'e': '4',
'f': '5',
'g': '',
'h': '8',
'i': '9',
'j': '10',
'k': '',
'l': '13',
'm': '',
'n': '',
'o': '',
'p': [{'q': '19', 'r': 1}],
's': 'Jan 1, 2020 1:44 pm',
't': 'Jan 1, 2020 1:44 pm'
}
}
>>>
我收到了 urllib3 的响应(也尝试过请求),对其进行解码并接收到 json.loads、
这是用 decode('utf-8')
解码后的数据,我想将其作为 json:
json_thing = b'{\n"stuff": {\n"a": "1",\n"b": "2",\n"d": "3",\n"e": "4",\n"f": "5",\n"g": "",\n"h": "8",\n"i": "9",\n"j": "10",\n"k": "",\n"l": "13",\n"m": "",\n"n": "",\n"o": "",\n"p": [{\n"q":\xc2\xa0"19",\n"r": 1\n}],\n"s": "Jan 1, 2020 1:44 pm",\n"t": "Jan 1, 2020 1:44 pm"\n}\n}'
但我总是出错
raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 18 column 14 (char 482)
看的时候,在"r":之后只有一个正整数,在"q"处有\xc2\xa0,是不是需要先把它清理掉?
问题出在 "q":\xc2\xa0"19",\n
中的 non-breaking space 字符。
解码后反序列化前替换:
>>> json.loads(json_thing.decode('utf-8').replace('\N{NO-BREAK SPACE}', ' '))
{
'stuff': {
'a': '1',
'b': '2',
'd': '3',
'e': '4',
'f': '5',
'g': '',
'h': '8',
'i': '9',
'j': '10',
'k': '',
'l': '13',
'm': '',
'n': '',
'o': '',
'p': [{'q': '19', 'r': 1}],
's': 'Jan 1, 2020 1:44 pm',
't': 'Jan 1, 2020 1:44 pm'
}
}
>>>