This section is dedicated to advantages of TJSON over the built-in functions.
Built-in functions create data structures to store the resulting structures, causing memory leaks if not freed explicitly.
TJSON uses array-based memory structures (which are freed automatically) and automatically pools data structures on a few occasions where they are preferable.
Since built-in functions return data structure' indexes, it becomes impossible to reliably tell apart the encountered values if the type may vary. That is,
var q = json_decode('{ "a": [], "b": {}, "c": 1, "d": true }'); show_debug_message(q[?"a"]); show_debug_message(q[?"b"]); show_debug_message(q[?"c"]); show_debug_message(q[?"d"]);
produces outputs like "0, 1, 1, 1", leaving little way of finding out what the value is.
TJSON, on other hand, uses easily distinguishable array-based structures, and offers functions (tj_is_array, tj_is_object, tj_is_bool, etc.) to reliably tell apart the values.
GameMaker has very partial boolean value support (more on this), and the built-in functions cannot produce boolean values (true/false) in resulting JSON strings at all - if an API requires you to provide a JSON boolean value, the most you can do is use a "special string" and string_replace_all it in the encoded string prior to submission.
TJSON, on other hand, implements a separate boolean type, allowing boolean values to be told apart after decoding, and to produce proper output upon encoding.