1. ホーム
  2. python

TypeErrorを解決する:文字列のインデックスはstrではなく、整数でなければならない。

2022-02-18 06:17:58
<パス

問題発生

ExtendValue = {
			"area": "1",
            "info": "{\"year\": 2014, \"a\": 12, \"b\": 3, \"c\":5}",
            "trip_country": "CN"
		}


TypeError: 文字列のインデックスはstrではなくintegerでなければならない、つまりインデックスは文字型ではなくint型でなければならない。

エラー理由

(このエラーには複数の可能性がありますが、私が遭遇したものだけを記録しておきます)

検索したところ、json形式が原因でエラーになるようです。infoの値はjsonデータで、pythonが直接認識できないようです。

回避策

辞書はオブジェクトをjsonとして保存しているため、jsonを読み込む前に逆方向のデコードが必要であることが判明しました。

json.loads()で、json形式をpythonが認識できる形式に変換する必要があります。

コードを1行追加します。

ExtendValue["info"]=json.loads(ExtendValue["info"])

json_str = json.dumps(data) # encode
data = json.loads(json_str) # decode

f = open('demo.json','w',encoding='utf-8')
json.dump(decode_json,f,ensure_ascii=False)
f.close()

f = open('demo.json','r',encoding='utf-8')
data = json.load(f)
print(data,type(data))
f.close()


拡大する

Python jsonモジュールのダンプ、ダンプ、ロード、ロード

json.dumps Pythonオブジェクトをjson文字にフォーマットする(dictをstrに変換する)
json.loads jsonの文字列をpythonのオブジェクトにデコードする(strをdictに変換する)
json.dump

json.load 主にpythonのオブジェクトをjsonファイルに書き出すために使用します。
f = open('demo.json','w',encoding='utf-8')
json.dump(decode_json,f,ensure_ascii=False)
f.close()


json.load json形式のファイルを読み込み、pythonのオブジェクトを返す
f = open('demo.json','r',encoding='utf-8')
data = json.load(f)
print(data,type(data))
f.close()