リクエストライブラリを使用した後、response.json()でdict以下になりました
{u'xyz': {u'key1': None, u'key2': u'Value2'}}
すべてのUnicode文字を削除し、Unicode文字なしでキーと値のペアのみを印刷したい
以下の方法で削除しようとしましたが、不正な文字列が表示されます
>>> import json, ast
>>> c = {u'xyz': {u'key1': None,u'key2': u'Value2'}}
>>> ast.literal_eval(json.dumps(c))
「ValueError:不正な形式の文字列」を取得する
それを行う方法に関する提案はありますか?
なしを「なし」に変更します。
c = {u'xyz': {u'key1': 'None', u'key2': u'Value2'}}
それはキャストの問題です-astはstrが好きです
また、おそらくすべてのNoneを空のstrまたは「None」strに変更したいかもしれません...このスレッドを参照してください: Python:Noneを空の文字列に変換する最も慣用的な方法? このコードで、私は空の文字列を「なし」に変更します。
def xstr(s):
if s is None:
return 'None'
return str(s)
このスニペットは、Unicodeプレフィックス表記u
なしでデータを保持するのに役立ちます。
>>> import json
>>> c = {u'xyz': {u'key1': u'Value1',u'key2': u'Value2'}}
>>> print c
{u'xyz': {u'key2': u'Value2', u'key1': u'Value1'}}
>>> d = eval(json.dumps(c))
>>> print d
{'xyz': {'key2': 'Value2', 'key1': 'Value1'}}
json.dumps() はdictを文字列型に変換し、 eval() はそれを逆にします。
注:テストのために、key1の値がNoneから 'value1'に変更されました
unicodestring.encode("ascii","replace")
を使用できます
>>> ustr=u'Apple'
>>> ustr
u'Apple'
>>> astr=ustr.encode("ascii","replace")
>>> astr
'Apple'
なぜこれが必要なのかよくわかりません。あなたの変数は通常のPython dictで通常のUnicode文字列を持ち、バイト文字列と区別するために偶然_u''
_として出力されますが、それを使用することは重要ではありません。
それらを文字列として保存して後でデータとして読み取る場合、JSONはそのための適切な形式です。したがって、リクエストの.json()
関数を呼び出す必要はまったくありません。応答の_.text
_属性を使用するだけです。結局のところ、これはすでにJSONです。
あなたの試み
_>>> ast.literal_eval(json.dumps(c))
_
最初にc
を再びJSONに変換し、次にPythonリテラルとして解析しようとするため失敗します。Pythonであるため機能しません=はJSONではなく、特に1つはnull
を持ち、もう1つはNone
を持っています。
では、Unicode文字列をバイト文字列に変更したいですか?それらをUTF8としてエンコードすることと同様に、それはうまくいくかもしれません:
_def to_utf8(d):
if type(d) is dict:
result = {}
for key, value in d.items():
result[to_utf8(key)] = to_utf8(value)
Elif type(d) is unicode:
return d.encode('utf8')
else:
return d
_
またはそのようなものですが、なぜそれが必要になるのかはわかりません。