Databricks中named_struct处理值内反斜杠的异常及处理方法
在Databricks的named_struct中保留JSON格式的转义斜杠
\/ 针对你需要得到{"test": "DE844\/374"}的需求,以下是正确处理方式及原因分析:
问题根源
- 尝试a中,
"DE844\/374"在SQL字符串字面量里会被解析为DE844/374,反斜杠被当作转义符直接处理,因此JSON输出时显示未转义的斜杠。 - 尝试b中,
"DE844\\/374"会被解析为字符串DE844\/374,JSON序列化时会把字符串里的反斜杠再次转义,最终输出DE844\\/374。
正确解决方案
如果你需要的是JSON输出中将斜杠转义为\/(实际存储的字符串值为DE844/374,仅在JSON序列化时做转义处理),使用to_json函数并开启escape_slash选项:
SELECT to_json(named_struct('test', 'DE844/374'), map('escape_slash', 'true'));
执行后返回结果:
{"test":"DE844\/374"}
如果你的实际需求是存储的字符串本身包含\和/(即值为DE844\/374),则需在SQL字符串中用双反斜杠表示单个反斜杠,但此时JSON输出会显示\\/:
SELECT named_struct('test', 'DE844\\/374');
返回结果:
{"test": "DE844\\/374"}
内容的提问来源于stack exchange,提问作者user14372101
相关产品推荐
相关产品推荐

