我正在为REST负载体创建一个json体,如下所示:
>>> j = json.loads('["foo", {"bar": ["to_be_replaced", 1.1, 1.0, 2]}]')
>>> text = "aaaa" + "\\" + "bbbbb" + "\\" + "cccc"
>>> j[1]["bar"][0] = text
>>> j
['foo', {'bar': ['aaaa\\bbbbb\\cccc', 1.1, 1.0, 2]}]
令人讨厌的是,另一方面预期的格式是这样的
"aaaa\bbbb\cccc".
一个可怕的想法,我知道。
我已经尝试了一切,并开始相信在json对象中以这种格式存储文本根本不可能。有办法吗?或者我是否需要让Web服务的开发人员选择更合理的分隔符。
我知道这真是一个反斜杠,如果我打印一个反斜杠
>>> print(text)
aaaa\bbbbb\cccc
但这并没有帮助我把它变成一个json对象。
答案 0 :(得分:2)
JSON解析器本质上应该只发出有效的JSON。来自RFC 8259,强调我的:
7。字符串
字符串的表示类似于C中使用的约定 编程语言家族。字符串的开头和结尾 引号。所有Unicode字符都可以放在 引号,除了必须转义的字符: 引号,反向固定,和控制字符(U + 0000 通过U + 001F)。
任何角色都可能被转义。如果角色在基本 多语言平面(U + 0000到U + FFFF),然后它可能是 表示为六个字符的序列:反向固相,然后 用小写字母u,后跟四个十六进制数字 编码角色的代码点。十六进制字母A到 F可以是大写或小写。 所以,例如,一个字符串 可以表示仅包含单个反向固相字符 作为“\ u005C”。
或者,有两个字符的序列转义 一些流行角色的表现形式。 所以,例如,a 只包含一个反向固相字符的字符串可能是 更紧凑地表示为
"\\"
。
注意短语“必须逃脱” - “必须”是一个正式定义的术语;不符合JSON规范中必须要求的东西不允许自称为JSON。
总结:数据中只包含文字反斜杠的字符串可以用JSON编码为"\u005c"
或"\\"
。它可能不会被编码为"\"
(包括该字符作为未转义的文字)。