オブジェクトを文字列にシリアル化する必要があるDjangoでプログラミングしていますが、文字列を\/
シリアル化する必要があります。
例:
simplejson.dumps({'id' : 'root\/leaf'})
次のような出力が必要です。
{"id": "root\/leaf"}
しかし、私はこれを取得します:
{"id": "root\\\\\\\\leaf"}
オブジェクトを文字列にシリアル化する必要があるDjangoでプログラミングしていますが、文字列を\/
シリアル化する必要があります。
例:
simplejson.dumps({'id' : 'root\/leaf'})
次のような出力が必要です。
{"id": "root\/leaf"}
しかし、私はこれを取得します:
{"id": "root\\\\\\\\leaf"}
JSON では、リテラル\
文字をエスケープし、 として表す必要があり\\
ます。Python は\
、エスケープされたリテラル文字も として表し\\
ます。それらの 2 つの間で、 に\
なり\\\\
ます。
Python では次の点に注意してください。
>>> "\\/" == "\/"
True
>>> {"id": "root\/leaf"} == {"id": "root\\/leaf"}
True
>>> {"id": "root\\/leaf"}["id"]
'root\\/leaf'
>>> print {"id": "root\\/leaf"}["id"]
root\/leaf
Python は余分なエスケープを出力しています。したがって、実行するとsimplejson.dumps({"id": "root\/leaf"})
、python は正しい結果{'id': 'root\\/leaf'}
を出力しますが、余分な Python エスケープが含まれているため、{'id': 'root\\\\/leaf'}
. Python はそれぞれ\\
を 1 文字と見なします。文字列の代わりにファイルに書き込むと、{'id': 'root\\/leaf'}
.
編集:追加するかもしれませんが、リテラル JSONは文字にマップされるため、リテラル JSON{"id": "root\/leaf"}
は にデコードされます。との両方が ;の有効な JSON エンコーディングです。エンコードする代わりにsimplejson を使用する簡単な方法はないようです。{'id': 'root/leaf'}
\/
/
\/
/
/
\/
/
/