我正在进行一个api调用,并尝试使用Django模型将其响应存储在Postgres中。 以下是我一直在做的事情:
response = requests.post(url='some.url.com', data=json.dumps(data), headers={'some': 'header'})
response_data = json.loads(response.content.decode('utf-8'))
#handler is a object of a model
handler.api_response = response_data
handler.save()
但是,当我的json有类似'field_name': '\x00\x00\x00\x00\x00'
的字段时,这通常会失败。它通常会给出以下错误:
DataError at /api/booking/reprice/
unsupported Unicode escape sequence
LINE 1: ... NULL, "api_status" = 0, "api_response" = '{"errorRe...
^
DETAIL: \u0000 cannot be converted to text.
CONTEXT: JSON data, line 1: ..."hoursConfirmed": 0, "field_name":...
我是如何通过使用以下方法来解决此问题的:
response = requests.post(url='some.url.com', data=json.dumps(data), headers={'some': 'header'})
response_data = json.loads(response.content.decode('utf-8'))
#handler is a object of a model
handler.api_response = json.loads(json.dumps(response_data).encode("unicode-escape").decode())
handler.save()
最初的问题就解决了。但最近,当我得到一个值为'field2_name': 'Hey "Whats up"'
的字段时。此操作因给出错误而失败:
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 143 (char 142)
可能是因为json.loads()与值中的"
混淆为封闭的"
,而不是转义的"
现在,如果我在json.loads(response.content.decode('utf-8'))
语句之后打印初始响应,它会将字段显示为\x00\x00\x00\x00\x00
但以下代码的输出:
response = requests.post(url='some.url.com', data=json.dumps(data), headers={'some': 'header'})
response_data = json.loads(response.content.decode('utf-8'))
print(json.dumps(response_data))
这将字段显示为\\u0000\\u0000\\u0000\\u0000\\u0000
。
\x00
如何变成\\u0000
如何将此字段保存到postgres表中? 这就是我能想到的
json.loads(json.dumps(response_data).replace('\\u0000',''))
在保存到postgres之前添加此语句
有更好的办法吗
代码response_data = json.loads(response.content.decode('utf-8'))
错了吗?或者让你无法摆脱那个特殊的角色
FWIW,我最近遇到了这个问题,你提出的解决方案也对我有效。我认为这可能是最简单的解决方法。显然this is the only character that can't go into a Postgres JSON column
相关问题 更多 >
编程相关推荐