json转储转义字符

时间:2018-08-30 15:33:54

标签: python json python-2.7

我在使用转义字符和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&<>'} \\\\)时,它超出了字符数限制。

2 个答案:

答案 0 :(得分:4)

值得阅读python中printstrrepr之间的区别(请参阅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

JSON string syntax