【发布时间】:2018-11-16 00:02:07
【问题描述】:
我需要将一些数据发送到我不拥有或操作的服务器。数据必须通过 HTTP POST 在表单参数中发送。键必须是“日志”,值必须是 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)
注意:python 2.7
【问题讨论】:
-
我不明白你为什么不只是发送普通字节......为什么它必须被转义?
-
@JoranBeasley 你好 Joran,感谢你回来。我想知道同样的事情。这是服务强加的要求,我无法控制。我同意,这很奇怪。
-
repl.it/@JoranBeasley/SoreGrimQuotient 看起来它仍然在这里转义......只有一个......你删除了你的另一个问题吗?
-
我怀疑您误解了服务文档...
-
@JoranBeasley 反斜杠被转义了。我想通过 HTTP 发送的字符是
\u0001,而不是\\u0001
标签: python json string unicode escaping