Python/Json 在数据中转储额外的反斜杠

问题描述

我的期望不正确吗? 所需的输出是针对单个字段

"{\"escapeChar\":\"\\\",\"quoteChar\":\"\"\",\"separatorChar\":\",\"}"

输入 csv 文本

"{""escapeChar"":""\\"",""quoteChar"":""\"""",""separatorChar"":"",""}"

代码

obj_str = json.dumps(table_obj).replace('RS Target Table','Table Name').replace('Stage Table','input_table')

#Get obj back with replacement  BANG!!
obj = json.loads(obj_str)

print ('after loads,source_serde_params: ',obj['source_serde_params'])
with open(filename,'w' ) as write_file:
                    json.dump(obj,write_file,indent=2)

控制台:

after loads,source_serde_params:  {"escapeChar":"\\","quoteChar":"\"","separatorChar":","}

输出文件

"source_serde_params": "{\"escapeChar\":\"\\\\\",\"quoteChar\":\"\\\"\",\"}"

蟒蛇 3.7.9 Windows 笔记本电脑

解决方法

Th 输出是正确的 - 只是您在向您展示数据中任何实际 \ 的环境中看到输出,以便它可以重用 \ 字符来表示转义序列对于其他字符,如 ',",n,t 等...

只需更改您查看输出文件的方式即可查看其实际内容。 当您在“控制台”中看到它时,您可能会看到交互式输出,其中显示了字符串的 repr,其中以这种方式使用了反冲;只需在编码的 json 字符串周围放置一个 print (...) 即可查看其实际的、未转义的内容。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...