【Godot4】JSON.parse_string()で整数がfloatになる場合の対処法
2026-07-02
Godotでプレイヤーの初期値やカードデータをJSONファイルから読み込もうとした時、JSON上では整数だった値がfloat型になってしまいました。
例えば11と書いた値も、JSON.parse_string()で読み込むと11.0になります。
この記事では、JSONでは整数だった値がfloat型になってしまう理由とint型へ変換する方法を紹介します。
環境
- Godot4.5
- GDScript
問題例
以下のようなJSONファイル(card_list.json)があるとします。
{ "1": 11, "2": 4, "3": 4 }
ファイルを読み込み、JSONを解析するコードは以下のように書きます。
var file = FileAccess.open("res://Assets/DeckData/card_list.json", FileAccess.READ)
if file == null:
push_error("保存ファイルを開けませんでした")
return
var json_text = file.get_as_text()
file.close()
var data = JSON.parse_string(json_text)
実際にこのコードを実行するとdataには次のデータが入りました。
{ "1": 11.0, "2": 4.0, "3": 4.0 }
このとき、data["1"]を整数の11として取得したいところですが、実際にはfloat型の11.0が格納されてしまいます。
なぜこのような動作になるのでしょうか?
JSONでは、整数と小数を別の型として定義しておらず、どちらもnumberとして扱われます。
GodotのJSONパーサーは、このnumberをfloat型へ変換するため、JSON上で11と書いても、読み込み後は11.0になります。
この数字を整数として使用したい場合は型の不一致によりエラーになる場合があります。 例えば配列の添え字に使う場合などが考えられます。
そのため、整数として使用する前にfloat型からint型へ変換しましょう。
修正案
データがfloat型になっているのでint型へ変換します。
for key in data.keys():
data[key] = int(data[key])
今回の場合は簡単な構造なのでDictionary型の各値をint型へキャストすればいいです。
変換後のdataは次のようになります。
{ "1": 11, "2": 4, "3": 4 }
配列や入れ子のDictionaryを含む場合は、必要な値を個別に変換するか、再帰的に処理する必要があります。
まとめ
JSON.parse_string()でJSONを読み込むと、JSON内の数値はfloat型として扱われます。
レベル、個数、配列の添字など、整数として使う値はint()で変換しましょう。💯