我有一个包含所有卡片的 JSON 对象。
我已将其保存为 .tres 资源,但是当我尝试使用该对象时,Godot 抛出一个错误,提示无法将 JSON 对象分配给 Dictionary。
extends Node
var card_data: Dictionary = {}
func _ready() -> void:
card_data = preload("res://singletons/database/card_details.tres")
func get_random_card(category: String) -> Dictionary:
var cards_in_category: Array = card_data[category]
var random_key: int = randi() % cards_in_category.size()
return cards_in_category[random_key]
我曾以为,如果你将 JSON 对象保存为资源,Godot 会自动将其转换为字典,但显然事实并非如此。如何转换 JSON 对象以使其适合在 Godot 中使用?
JSON
如果资源是这样设置的,Godot 会自动将文件加载为类型(在外部编辑器中打开 .tres 文件,其中有一些额外的元数据告诉 Godot 它是 Json)。请参阅JSON
此处的文档:https ://docs.godotengine.org/en/stable/classes/class_json.html 。preload()
如果文件无效,将会抛出错误。要解析 Json,请访问其
data
属性或调用get_data()
:您还可以加载没有资源元数据的裸 Json 文件。反序列化 Json 字符串有两种方法:
JSON.parse_string(json_string)
如果解析失败则返回静态的
null
,否则返回解析后的数据。my_json.parse(json_string)
这不是静态的,所以你需要先新建一个
JSON
实例。它返回一个Error
并将解析后的数据放入JSON
实例的data
属性中。 正如您所看到的,这有点烦人。