Hello, I'm trying convert load JSON codes from GD3 to GD4. I got these errors.

Method 1

var inv_data = {}

func _ready():
	var inv_data_file = File.new()
	inv_data_file.open("res://Data/ItemData.json", File.READ)
	var inv_data_json = JSON.new().parse(inv_data_file.get_as_text())
	inv_data_file.close()
	inv_data = inv_data_json.result

Error: Invalid get index 'result' on base int

Method 2:

var items

func _ready():
	items = read_from_JSON("res://Data/ItemData.json")
	for key in items.keys():
		items[key]["key"] = key

func read_from_JSON(path):
	var file = File.new()
	if file.file_exists(path):
		file.open(path, File.READ)
		var json_object = JSON.new
		json_object.parse(file.get_as_text())
		file.close()
		return json_object.get_data()
	else:
		print("Invalid")

Error: Nonexistent function 'parse' in base 'Callable'

Can anyone point out what I did wrong and how to fix them? Thank you.
PS - how to tag question?

  • var inv_data = {}
    
    func _ready():
    	var inv_data_file = File.new()
    	inv_data_file.open("res://Data/ItemData.json", File.READ)
    	var json = JSON.new()
    	json.parse(inv_data_file.get_as_text())
    	inv_data_file.close()
    	inv_data = json.get_data()

    That's should work assuming you don't want to do error checking. Otherwise look at the doc page I linked to.

The function is called get_data() not result

https://docs.godotengine.org/en/latest/classes/class_json.html

The first example should work if you just rename that. The second is wrong because this line you forgot the ()

var json_object = JSON.new()

    cybereality

    Method 2 is fixed

    but Method 1 I got error - non exist get_data in base int
    inv_data = inv_data_json.get_data()

    var inv_data = {}
    
    func _ready():
    	var inv_data_file = File.new()
    	inv_data_file.open("res://Data/ItemData.json", File.READ)
    	var json = JSON.new()
    	json.parse(inv_data_file.get_as_text())
    	inv_data_file.close()
    	inv_data = json.get_data()

    That's should work assuming you don't want to do error checking. Otherwise look at the doc page I linked to.