37 lines
892 B
GDScript
37 lines
892 B
GDScript
class_name LuaJSONUtils
|
|
extends RefCounted
|
|
|
|
static func setup_json_api(vm: LuauVM):
|
|
vm.lua_newtable()
|
|
|
|
vm.lua_pushcallable(_lua_json_parse_handler, "JSON.parse")
|
|
vm.lua_setfield(-2, "parse")
|
|
|
|
vm.lua_pushcallable(_lua_json_stringify_handler, "JSON.stringify")
|
|
vm.lua_setfield(-2, "stringify")
|
|
|
|
vm.lua_setglobal("JSON")
|
|
|
|
static func _lua_json_parse_handler(vm: LuauVM) -> int:
|
|
var json_string: String = vm.luaL_checkstring(1)
|
|
|
|
var json = JSON.new()
|
|
var parse_result = json.parse(json_string)
|
|
|
|
if parse_result == OK:
|
|
vm.lua_pushvariant(json.data)
|
|
return 1
|
|
else:
|
|
# Return nil and error message
|
|
vm.lua_pushnil()
|
|
vm.lua_pushstring("JSON parse error: " + json.get_error_message())
|
|
return 2
|
|
|
|
static func _lua_json_stringify_handler(vm: LuauVM) -> int:
|
|
var value = vm.lua_tovariant(1)
|
|
|
|
var json_string = JSON.stringify(value)
|
|
|
|
vm.lua_pushstring(json_string)
|
|
return 1
|