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

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オブジェクトを印刷するのが正しい方法です。

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