【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パーサーは、このnumberfloat型へ変換するため、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()で変換しましょう。💯

ブログゲーム開発Godot