每当我尝试从python打印出json时,它会忽略换行符并打印文字字符串“\ n”而不是换行符。
我正在使用jinja2生成json。这是我的代码:
print json.dumps(template.render(**self.config['templates'][name]))
它打印出下面块中的所有内容(字面意思 - 甚至是引号和“\ n”字符串):
"{\n \"AWSTemplateFormatVersion\" : \"2010-09-09\",\n \"Description\" : ...
(截短的)
每当我试图抛弃任何东西而不是一个字典时,我会得到这样的东西。即使我尝试json.loads()然后再转储它我得到垃圾。它只是删除所有换行符。
出了什么问题?
答案 0 :(得分:17)
这是我用于漂亮打印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)
如果您需要非ascii支持, json.dumps()
也接受编码参数。
答案 1 :(得分:7)
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
答案 2 :(得分:1)
问题是您对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)
答案 3 :(得分:0)
如果您的字符串已经是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)