15

每当我尝试从 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

4 回答 4

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)

json.dumps()如果您需要非 ascii 支持,还接受编码参数。

于 2013-05-01T14:07:53.227 回答
8

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 object,而不是它的字符串表示:

>>> print(s)
hello
there
>>> print(json.loads(json.dumps(s)))  # pointless; just for demonstration...
hello
there
于 2013-05-01T13:00:13.243 回答
1

问题是您的输入json.dumpsstring. 尝试以下操作:

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

如果您这样做是为了缩进等...请尝试以下操作:

print json.dumps(json.loads(template.render(**self.config['templates'][name])), sort_keys=True, indent=4)
于 2016-09-21T14:39:51.903 回答
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)
于 2016-06-10T21:17:57.697 回答