在python中取消显示单个unicode字符的干净方法json.dumps文件(数组)?

2024-10-04 01:25:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要发送一些数据到一个服务器,我不拥有或操作。数据必须通过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


Tags: csv数据字符串服务器json数组字符replace
1条回答
网友
1楼 · 发布于 2024-10-04 01:25:44

只需在列表中使用unicode字符串,不要转义unicode

logs2 = [u'VAL1\u0001{"key":"VAL2"}', u'VAL1\u0001{"key":"VAL2"}'] 
serialized_logs2 = json.dumps(logs2)

应该做正确的事你可以通过

print(serialized_logs2 == serialized_logs.replace("\\\\u0001","\\u0001"))

(其中序列化的日志是上面的json.dumps结果)

见:https://repl.it/@JoranBeasley/SoreGrimQuotient(Python2)

相关问题 更多 >