不能从python中打印json

时间:2013-05-01 12:59:03

标签: python json

每当我尝试从python打印出json时,它会忽略换行符并打印文字字符串“\ n”而不是换行符。

我正在使用jinja2生成json。这是我的代码:

print json.dumps(template.render(**self.config['templates'][name]))

它打印出下面块中的所有内容(字面意思 - 甚至是引号和“\ n”字符串):

"{\n    \"AWSTemplateFormatVersion\" : \"2010-09-09\",\n    \"Description\" : ... 

(截短的)

每当我试图抛弃任何东西而不是一个字典时,我会得到这样的东西。即使我尝试json.loads()然后再转储它我得到垃圾。它只是删除所有换行符。

出了什么问题?

4 个答案:

答案 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)