我需要发送一些数据到一个服务器,我不拥有或操作。数据必须通过HTTPPOST以表单参数的形式发送。键必须是“logs”,值必须是JSON数组。此数组的每个元素都是一个CSV字符串,由Ctrl-A
、\u0001
(不是文字字符)的unicode表示形式分隔。你知道吗
当我通过json.dumps
将CSV字符串数组转换为JSON数组时,它隐式地转义一些字符(例如"
)。你知道吗
问题:json.dumps
还隐式转义我的CSV分隔符\u0001
,将其更改为\\u0001
,这会导致服务器拒绝我的数据。为了解决这个问题,我手动“取消”-转义:s.replace('\\\\u0001', '\\u0001')
问题:使用此黑客解决方案是否会产生任何潜在影响?我有没有更优雅的方法来处理这个问题?你知道吗
# Ctrl-A (\u0001) delimited CSV strings
logs = ['VAL1\\u0001{"key":"VAL2"}', 'VAL1\\u0001{"key":"VAL2"}']
# Serialize as JSON (it implicitly escapes chars, including Ctrl-A)
serialized_logs = json.dumps(logs)
# replace '\\u0001' with '\u0001' (unescape it)
# this seems HACKY -- is there a better way to handle this?
serialized_logs = serialized_logs.replace('\\\\u0001', '\\u0001')
# send over HTTP
params = { 'logs' : serialized_logs }
response = requests.post(url, data=params)
注:Python2.7
只需在列表中使用unicode字符串,不要转义unicode
应该做正确的事你可以通过
(其中序列化的日志是上面的
json.dumps
结果)见:https://repl.it/@JoranBeasley/SoreGrimQuotient(Python2)
相关问题 更多 >
编程相关推荐