2017-08-20 5 views
1

私はPOSTMANを使ってPOSTデータを送信しています。データを投稿した後、私はrequest.bodyで受け取る私の体は、私は体をjson.loadsしたいPython - jsonの ` n`

{ 
    "title": "Kill Bill: Vol. 2","content": 
    "http://netflixroulette.net/api/posters/60032563.jpg\n\nabcdefrefbqwejf\n\nq efjqwefqwrf aksks" 
} 

です。しかし、私は私のjsonで新しい行の文字を持っています。

したがって、最初に\n\\nに置き換えてからjson.loadsに置き換えます。しかし\\n\nを交換した後、私が受け取る文字列は次のとおりです。 -

{\n "title": "Kill Bill: Vol. 2","content":\n "http://netflixroulette.net/api/posters/60032563.jpg\n\nabcdefrefbqwejf\n\nq efjqwefqwrf aksks"\n} 

そして、私はjson.loadsを行うときに、それはエラーになります。これは、文字列の始まりにある改行文字のためであり、他のさまざまな場所でも同様です。

どうすればいいですか?

+0

データはURLのように見えるので、 '\'を '/'に置き換えてみてください。同じ(URLとして)動作するはずですが、エスケープ文字としては機能しません。 – Quelklef

+0

サンプルの説明を教えてください。 – PythonEnthusiast

+0

のように、 'http://website.com \ data \ moredata'を受け取って' http:// website.com/data/moredata'に変換するので、エスケープ文字はありません。私はURLで '' \ ''と '/'が同じ扱いを受けていると仮定していますが、これは正しいと思います。 – Quelklef

答えて

3

「\ n」の代わりに実際の改行文字「\ n」が置き換えられているようです。

コンテンツの改行文字「\ n」を削除して実際の改行文字で置き換えたい場合は、「\\ n」を「\ n」(つまりその逆)に置き換えてみてください。

後続の回答ここ

それは私の理解では、どのように動作するかです:改行文字が実際にありrequest.body

{ 
    "title": "Kill Bill .... 

のあなたの第一および第二のラインを見てみると

'\n')を最初の行の末尾に追加します。話すと解釈されているので、私たちはそれを見ません。それは、様々なプログラム(例えば、テキストエディタ/ビューア)によって見られ、解釈されるときにフォーマットに影響を及ぼす多くの印刷不能文字の1つである。あなたが最初にやろうとしていたのは、あなたの.json本体の一部であるContentの部分を見ていた"\n"を置き換えたものです。これらのもの:

... 3.jpg\n\nab\n\nq ... 

トラブルはバックスラッシュ'\'は、通常の文字をエスケープし、特別な、非印字可能文字にアクセスするために使用されていることです。だから、'\n''\\n'と置き換えようとすると、実際に改行が文字列"\\n"に置き換えられていました。あなたは何を変更したいのか分かりますが、"\n\n"さんはまだそこにいて、代わりに新しい"\n"が登場し始めました(つまりあなたの疑問)。

は、それは私は、あなたがそれは改行として解釈されないように、改行文字列を印刷して行くが、"\n"として表示していないだろうか

この(目に見えないものを好むこれらの場合に覚えておくことが役立つこと実際には休憩です)。この文字列を印刷するには、実際に'\'文字を印刷し、後続のエスケープ文字を印刷しないように、インタープリタ/テキストエディタに認識させる必要があります。 '\'は後続のエスケープコマンドを示しているため、エスケープシンボル自体があります。つまり、書式設定された文字列に'\'を表示するには、"\\"のように2回入力します。したがって、それは

... 3.jpg\n\nab\n\nq ... 

のように見えるにもかかわらず、あなたは、それはそれがない方法を見てもらうこと

... 3.jpg\\n\\nab\\n\\nq ... 

ようにそれをフォーマットする必要があったでしょう。

+0

サンプルコードを提供してください。 – PythonEnthusiast

+0

@PythonEnthusiast 'json.loads(request.body.replace( '\\ n'、 '\\\\ n'))' – Quelklef

+0

それは働いた。しかし、私はそれを完全に理解していませんでした。あなたは少し説得力があることができますか?ありがとうございました – PythonEnthusiast