Yet another Godot 4 library to de/serialize JSON files from/into your classes.
- Supports custom classes, arrays and primitives.
- Deserialize JSON into new instances.
- Deserialize JSON into existing instance (merge).
- Serialize JSON.
- Supports both files and strings.
- Requires providing type factory Callable for instantiation of custom classes.
- JSON Arrays must be homogenous (regarding to custom classes only, unless your type factory can guess types).
- Can't deserialize into existing instance, if JSON root object is primitive. This is limitation of GDscript.
- Deserialize new integer instances as floats. This is limitation of JSON format: there 's only a "number". If you have ideas how to remove those limitations - wellcome to the Issues or PR! Currently I decided not to try guessing integers by zero fraction part because it is unreliable.
Primitives as a root objects.
var test = SimpleJSON.load_from_string("-5.3")
assert(test is float)
assert(test == -5.3)
test = SimpleJSON.load_from_string("12")
assert(test is float) # JSON do not distinguish floats and integers, so all parsed as floats.
assert(test == 12)
Deserialize simple JSON class.
const TEST_1 = "{ "i": 123, "b": true, "s": "Hello", "f": 3.14 }"
class Test1:
var i: int
var b: bool
var s: String
var f: float
# Deserialize into existing variable - requires NO type factory.
func test1a():
var test := Test1.new()
var is_success = SimpleJSON.load_from_string_to(test, TEST_1)
assert(is_success)
# Deserialize into new variable - requires type factory to instantiate your custom class.
func test1_factory(path: String) -> Variant:
return Test1.new()
func test1b():
var test = SimpleJSON.load_from_string(TEST_1, test1_factory)
assert(test is Test1)
Quick implementation of game Settings class.
extends Node
const PATH = 'user://settings.json'
class Video:
var full_screen := false
var video := Video.new()
class Audio:
var master_enabled := true
var master_vol := 1.0
var audio := Audio.new()
func _ready():
reload()
func reload():
SimpleJSON.load_from_file(self, PATH)
func save():
SimpleJSON.save_to_file(self, PATH)