我在使用转义字符和json.dumps时遇到了麻烦。
似乎每当调用json.dumps时都会添加额外的转义字符。示例:
count_t
这很好,但是当我执行json转储时,会添加很多额外的值。
not_encoded = {'data': '''!"#$%'()*+,-/:;=?@[\]^_`{|}~0000&<>'''}
print(not_encoded)
{'data': '!"#$%\'()*+,-/:;=?@[\\]^_`{|}~0000&<>'}
转储不应看起来像这样。这是\和“的双重转义。有人知道这是为什么以及如何解决?我希望json.dumps输出
json.dumps(not_encoded)
'{"data": "!\\"#$%\'()*+,-/:;=?@[\\\\]^_`{|}~0000&<>"}'
编辑
重新加载到转储中:
'{"data": "!\"#$%'()*+,-/:;=?@[\\]^_`{|}~0000&<>"}'
问题是我遇到了需要这些特殊字符的API端点,但是当json.dumps添加其他转义字符(the_dump = json.dumps(not_encoded)
json.loads(the_dump)
{u'data': u'!"#$%\'()*+,-/:;=?@[\\]^_`{|}~0000&<>'}
和\\\\
)时,它超出了字符数限制。
答案 0 :(得分:4)
值得阅读python中print
,str
和repr
之间的区别(请参阅here for example)。您正在将打印的原始字符串与json编码的repr进行比较,后者将有两次转义-一个来自json编码,另一个来自python的字符串表示。
但是,否则没有问题,如果将len(not_encoded['data'])
与len(json.loads(json.dumps(not_encoded))['data'])
进行比较,您会发现它们是相同的。没有多余的字符,但是有多种显示它们的方法。
答案 1 :(得分:2)
FormFragmentDirections.ActionFormToList action = new FormFragmentDirections.ActionFormToList(sample.getIdJob());
Navigation.findNavController(getView()).navigate(action);
被要求根据JSON standard逃脱json.dumps
和"
。如果API使用JSON,那么使用这些字符时就无法避免数据长度的增加。
来自json.org: