Не удается распечатать json из python
Всякий раз, когда я пытаюсь распечатать json из python, он игнорирует разрывы строк и печатает буквальную строку "\n" вместо новых символов строки.
Я создаю json, используя jinja2. Здесь мой код:
print json.dumps(template.render(**self.config['templates'][name]))
Он печатает все в блоке ниже (буквально - даже кавычки и строки "\n" ):
"{\n \"AWSTemplateFormatVersion\" : \"2010-09-09\",\n \"Description\" : ...
(усечены)
Я получаю что-то вроде этого всякий раз, когда я пытаюсь сбрасывать что-либо, кроме диктата. Даже если я попробую json.loads(), то сбрасываю его снова, я получаю мусор. Он просто удаляет все разрывы строк.
Что пойдет не так?
Ответы
Ответ 1
Это то, что я использую для довольно-печатных json-объектов:
def get_pretty_print(json_object):
return json.dumps(json_object, sort_keys=True, indent=4, separators=(',', ': '))
print get_pretty_print(my_json_obj)
json.dumps()
также принимает параметры для кодирования, если вам нужна поддержка без ascii.
Ответ 2
json.dumps()
возвращает строку, закодированную в JSON. Стандарт JSON предусматривает, что новые строки кодируются как \\n
, который затем печатается как \n
:
>>> s="""hello
... there"""
>>> s
'hello\nthere'
>>> json.dumps(s)
'"hello\\nthere"'
>>> print(json.dumps(s))
"hello\nthere"
Не так много можно сделать, чтобы изменить это, если вы хотите сохранить действительную строку JSON. Если вы хотите распечатать его, правильным способом будет печать объекта JSON, а не его строковое представление:
>>> print(s)
hello
there
>>> print(json.loads(json.dumps(s))) # pointless; just for demonstration...
hello
there
Ответ 3
Если ваша строка уже JSON, то довольно печатайте ее, используя
def pp_json(json_string):
# converts json to dict then back to string... ridiculous but not pointless
print(json.dumps(json.loads(json_string), sort_keys=True, indent=4))
return
pp_json(your_json_string)
Ответ 4
Проблема заключается в том, что ваш вход в json.dumps
равен string
. Попробуйте следующее:
print type(template.render(**self.config['templates'][name]))
Это вы делаете это с отступом и т.д.... попробуйте следующее:
print json.dumps(json.loads(template.render(**self.config['templates'][name])), sort_keys=True, indent=4)