Tenho um objeto JSON que contém todos os cartões.
Salvei isso como um recurso .tres, mas quando tento usar esse objeto, o Godot me gera um erro dizendo que não é possível atribuir o objeto JSON ao Dicionário.
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]
Eu tinha pensado que se você salvasse um objeto JSON como um recurso, o Godot converteria isso automaticamente para um dicionário, mas claramente esse não é o caso. Como eu converto o objeto JSON para que ele seja adequado para uso no Godot?
O Godot carrega automaticamente o arquivo como tipo
JSON
se o recurso estiver configurado dessa forma (abra o arquivo .tres em um editor externo, há alguns metadados adicionais que informam ao Godot que é Json). Veja a documentação aquiJSON
: https://docs.godotengine.org/en/stable/classes/class_json.html .preload()
gerará um erro se o arquivo não for válido.Para analisar o Json, acesse sua
data
propriedade ou chameget_data()
:Você também pode carregar arquivos Json nus sem os metadados do recurso. Há duas maneiras de desserializar uma string Json:
JSON.parse_string(json_string)
Este é estático e retorna
null
se a análise falhar, caso contrário, retorna os dados analisados.my_json.parse(json_string)
Isso não é estático, então você precisa criar uma
JSON
instância primeiro. Ele retorna umError
e coloca os dados analisados na propriedadeJSON
da instânciadata
. Como você pode ver, isso é um pouco irritante.