オブジェクトを文字列にシリアル化する必要がある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'}\//\///\///