代码之家  ›  专栏  ›  技术社区  ›  Jordan

json转储转义字符

  •  2
  • Jordan  · 技术社区  · 7 年前

    我对转义字符和json.dumps文件.

    似乎在任何时候都会添加额外的转义字符json.dumps文件被称为。例子:

    not_encoded = {'data': '''!"#$%'()*+,-/:;=?@[\]^_`{|}~0000&<>'''}
    print(not_encoded)
    {'data': '!"#$%\'()*+,-/:;=?@[\\]^_`{|}~0000&<>'}
    

    这很好,但是当我进行json转储时,它会添加很多额外的值。

    json.dumps(not_encoded)
    '{"data": "!\\"#$%\'()*+,-/:;=?@[\\\\]^_`{|}~0000&<>"}'
    

    垃圾场不应该是这样的。它是双转义的\和'。有人知道为什么会这样,怎么解决吗?我想要json.dumps文件输出

    '{"data": "!\"#$%'()*+,-/:;=?@[\\]^_`{|}~0000&<>"}'
    

    编辑

    装回垃圾场:

    the_dump = json.dumps(not_encoded)
    json.loads(the_dump)
    {u'data': u'!"#$%\'()*+,-/:;=?@[\\]^_`{|}~0000&<>'}
    

    \\\\ \\" ).

    2 回复  |  直到 7 年前
        1
  •  4
  •   ChrisD    7 年前

    关于两者的区别值得一读 print , str repr 在python中(请参见 here for example ). 您将打印的原始字符串与json编码的repr进行比较,后者将有两个转义-一个来自json编码,另一个来自python的字符串表示。

    但如果你比较一下,那就没有问题了 len(not_encoded['data']) 具有 len(json.loads(json.dumps(not_encoded))['data'])

        2
  •  2
  •   bohrax    7 年前

    json.dumps 逃走 " \ 根据 JSON standard . 如果API使用JSON,则在使用这些字符时,无法避免数据长度增长。

    json.org :

    JSON string syntax