0

オブジェクトを文字列にシリアル化する必要があるDjangoでプログラミングしていますが、文字列を\/シリアル化する必要があります。

例:

simplejson.dumps({'id' : 'root\/leaf'})

次のような出力が必要です。

{"id": "root\/leaf"}

しかし、私はこれを取得します:

{"id": "root\\\\\\\\leaf"}
4

1 に答える 1

1

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'}\//\///\///

于 2010-05-03T22:56:09.973 に答える