Python: Как записать json отформатированную строку в json файл - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть требование, в котором я должен записать некоторую строку JSON в файл.

Например, у меня есть строка ниже в

Мой python код:

 S = '''{
"K1": "v1",
"K2" : "\nv2"
}'''

Когда я пытаюсь записать его в файл json, используя json .dumps (s), он записывается в файл, как показано ниже:

"{\"k1\" : \"v1\",\"k2\" : \"\\nv2\"}"

В то время как он мне нужен быть похожим на:

 {
"K1": "v1",
"K2" : "\nv2"
}

В json файле.

Я могу добиться этого, если объявлю свою строку как необработанную строку, предшествующую r, но в реальном сценарии я не могу объявить Необработанная строка при получении строкового значения в переменной python.

Примечание: у меня есть несколько escape-последовательностей в моем json строковом значении, как указано в значении для ключа k2 в приведенной выше структуре json .

Буду очень признателен, если кто-нибудь поможет мне сгенерировать правильный файл json с требуемым форматом json. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Объявите вашу переменную как

S = {
"K1": "v1",
"K2" : "\nv2"
}

Тогда это будет работать. Например:

In [16]: s
Out[16]: {'K1': 'v1', 'K2': '\nv2'}

In [17]: st = json.dumps(s)

In [18]: st
Out[18]: '{"K1": "v1", "K2": "\\nv2"}'

In [19]: s1 = '''{
    ...: "K1": "v1",
    ...: "K2" : "\nv2"
    ...: }'''

In [20]: st1 = json.dumps(s1)

In [21]: st1
Out[21]: '"{\\n\\"K1\\": \\"v1\\",\\n\\"K2\\" : \\"\\nv2\\"\\n}"'

Обновление : если ваши данные поступают в виде строки, сначала преобразуйте их в словарь, используя json .loads (). Например:

In [24]: st
Out[24]: '{"K1": "v1", "K2": "\\nv2"}'

In [25]: json.loads(st)
Out[25]: {'K1': 'v1', 'K2': '\nv2'}

In [26]: json.dumps(json.loads(st))
Out[26]: '{"K1": "v1", "K2": "\\nv2"}'
0 голосов
/ 15 апреля 2020

Я работаю для моего конкретного c требования, используя следующие модификации python3 .6 код:

py_string = '''{ "k1":"v1","k2":"\nv2"}'''
valid_json_string = json.dumps(json.loads(py_string ,strict=False))
with open('test.json', 'w') as outfile:
     json.dump(valid_json_string, outfile)

С помощью этих строк кода я смог написать эту json строку в * Файл 1017 * без экранирования двойных кавычек и строк.

Как правило, когда мы вставляем содержимое json напрямую, чтобы присвоить его строке python, Python не допустит json допустимых управляющих символов в строке. python строка будет экранировать специальные управляющие символы, такие как \ n будет считаться символом новой строки.

Поэтому, чтобы разрешить ее в python string json .loads (), поддерживается флаг "strict". Если strict это false (True является значением по умолчанию), то управляющие символы будут разрешены внутри строк. В этом контексте управляющими символами являются те, которые имеют коды символов в диапазоне 0–31, включая «\ t» (табуляция), «\ n», «\ r» и «\ 0».

Для получения дополнительной информации - https://docs.python.org/3/library/json.html

...