Подтвердить что ты не робот

Не удается распечатать 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(), то сбрасываю его снова, я получаю мусор. Он просто удаляет все разрывы строк.

Что пойдет не так?

4b9b3361

Ответ 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)