pythonがjsonを解析するときに「string indices must be integers」が表示されます.

1954 ワード

import jsonですが、奇妙な問題が発生しました.
string indices must be integers
このエラーは,[]の中に文字列ではなく数字が入っているはずだが,dictはkeyを使ってアクセスしてもよいというエラー感覚で解析した結果はlistのようだ.
だから文字列解析の問題だと考えます.印刷解析の結果、長い文字列で、keyの山が押し合い、valueが欠けています.元の文字列を印刷すると、keyは二重引用符で囲まれておらず、'{a:'abcde',b:'abcde}'に似ている詳細が見つかりました.
はい、これはjson仕様に合わない文字列です.それを処理するには、正規表現を使用して仕様のkeyに変換して再解析したり、他の機能のより強力なライブラリであるdemjsonを使用したりすることができます.
pip install demjson,解決.
jsonの使い方:
import json
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = json.dumps(data)
print json
#   :
#[{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}]
import json
jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = json.loads(jsonData)
print text
#   :
#{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}

demjsonの使い方:
import demjson
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = demjson.encode(data)
print json
#   :
#[{"a":1,"b":2,"c":3,"d":4,"e":5}]
import demjson
json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = demjson.decode(json)
print  text
#   :
#{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
import demjson
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = demjson.encode(data)
print json
#   :
#[{"a":1,"b":2,"c":3,"d":4,"e":5}]
import demjson
json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = demjson.decode(json)
print  text
#   :
#{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}