Как я могу заставить python json.dumps () экранировать косую черту? - PullRequest
0 голосов
/ 07 июня 2018

В моем файле JSON есть строки с косой чертой, которые, по-видимому, экранированы.например.This is path: \/home\/user\/test.txt.Когда я импортирую это, используя встроенный в Python метод json.loads(), удаляются косые черты.

Комментарии здесь и здесь правильно указывают, что в JSON \/ по сути означает то же самое, что и /, поэтому этого следует ожидать.

Проблема в том, что я хочу, чтобы эти прямые косые черты оставались экранированными, когда я позже снова отправлюсь на экспорт данных JSON через json.dumps(),Файл JSON, с которым я работаю, должен оставаться как можно более неизменным.

В настоящее время у меня есть хак, когда я выписываю JSON после того, как я выполню желаемую манипуляцию с данными: json_str.replace('/', '\/').Мне это некрасиво, или я ошибаюсь?Есть ли лучший способ?

Вот более полный пример:

$ python
Python 2.7.13 (default, Nov 24 2017, 17:33:09) 
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> import collections
>>> a = r"""{
...     "version": 1,
...     "query": "This is path: \/home\/user\/test.txt"
... }"""
>>> j = json.loads(a, object_pairs_hook=collections.OrderedDict)
>>> print j
OrderedDict([(u'version', 1), (u'query', u'This is path: /home/user/test.txt')])
>>> print json.dumps(j, indent=4, separators=(',', ': '))
{
    "version": 1,
    "query": "This is path: /home/user/test.txt"
}
>>> print json.dumps(j, indent=4, separators=(',', ': ')).replace('/', '\/')
{
    "version": 1,
    "query": "This is path: \/home\/user\/test.txt"
}
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...