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()
関連
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み] pygame clock.tick() vs ゲームメインループのフレームレート
-
[解決済み】Bokehでヒートマップを正しく作成する方法
-
[解決済み] AttributeError: 'NoneType' オブジェクトには 'lower' 属性がない python
-
[解決済み] AttributeErrorを受信しています。WITH オブジェクトに EXIT が定義されていても __exit__ を受け取る
-
[解決済み] ModuleNotFoundError: win32serviceutil' という名前のモジュールはありません。
-
[解決済み] IndexError: Index 2 is out of bounds for axis 0 with size 2
-
SyntaxError: キーワードは式にできない Solution
-
UnicodeDecodeError: 'ascii' コーデックは、位置 7 のバイト 0xd0 をデコードできません: ordi
-
Python顔認識 (GUIインターフェース) - pyopencvをベースとする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み] ValueError : "Can only tuple-index with a MultiIndex " を取得する。
-
[解決済み】Pythonが'list'オブジェクトをstrに変換できないエラー [終了しました]
-
反復解法と関連付けの間に変化した辞書のサイズ
-
[解決済み] Ubuntu 16.04でpython 2.7.13を完全にアンインストールする方法
-
[解決済み] 式中括弧内のf-stringにおいて、=(イコール)はどのような働きをするのでしょうか?
-
[解決済み] 出力は正しいのですが、なぜ改行が続くのですか?[クローズド]です。
-
pipのインストールエラーです。ImportError: pkg_resources' という名前のモジュールがありません。
-
ModuleNotFoundError: mpl_toolkits.basemap'という名前のモジュールはありません。
-
socket.gaierror:[Errno 11001] getaddrinfoに失敗しました。