web-dev-qa-db-ja.com

json.loadsを使用するときのuは何ですか?

私はSoundcloudAPIからのJSON情報を解析するためのPythonスクリプトを書いていましたが、json.loads(val)を使用するときの「u」とは何か、そしてどのようにJSON情報をuなしでオブジェクトに保存するには?

つまり、なぜこれにuがあるのですか?

>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]

私がさらに意味することを理解するには、ここの「JSONのデコード」セクションを参照してください。

http://docs.python.org/library/json.html

18
ZenLikeThat

Unicode文字列。 Pythonチュートリアル を参照してください。

Pythonソースコードでは、Unicodeリテラルは「u」または「U」文字のプレフィックスが付いた文字列として記述されます:u'abcdefghijk '。

nicodeリテラルPythonソースコード

15
Francis Avila

u'sは、Unicode文字列が作成されることになっていることを示すためにあります。

json.dumpが文字列をUnicode文字列に変換し、それを行った痕跡を残さないのは残念です。json.loadは元に戻すことができないからです。

文字列オブジェクトに変換するには、 PyYAML :を使用します。

>>> import yaml
>>> yaml.load('["foo", {"bar":["baz", null, 1.0, 2]}]')
>>> ['foo', {'bar': ['baz', None, 1.0, 2]}]

しかし注意してください!何らかの理由で、オブジェクト文字列とUnicode文字列を含むオブジェクトをjson.dumpした場合、yamlはすべてをオブジェクト文字列としてロードします(ただし、実際にはjson.dumpのせいです)