# funkin.data Data structures are parsed using `json2object`, which uses macros to generate parser classes based on anonymous structures OR classes. Parsing errors will be returned in `parser.errors`. See `json2object.Error` for an enumeration of possible parsing errors. If an error occurred, `parser.value` will be null. The properties of these anonymous structures can have their behavior changed with annotations: - `@:optional`: The value is optional and will not throw a parsing error if it is not present in the JSON data. - `@:default("test")`: If the value is optional, this value will be used instead of `null`. Replace `"test"` with a value of the property's type. - `@:default(auto)`: If the value is an anonymous structure with `json2object` annotations, each field will be initialized to its default value. - `@:jignored`: This value will be ignored by the parser. Their presence will not be checked in the JSON data and their values will not be parsed. - `@:alias`: Choose the name the value will use in the JSON data to be separate from the property name. Useful if the desired name is a reserved word like `public`. - `@:jcustomparse`: Provide a custom function for parsing from a JSON string into a value. - Functions must be of the signature `(hxjsonast.Json, String) -> T`, where the String is the property name and `T` is the type of the property. - `hxjsonast.Json` contains a `pos` and a `value`, with `value` being an enum: https://nadako.github.io/hxjsonast/hxjsonast/JsonValue.html - Errors thrown in this function will cause a parsing error (`CustomFunctionException`) along with a position! - Make sure to provide the FULLY QUALIFIED path to the custom function. - `@:jcustomwrite`: Provide a custom function for serializing the property into a string for storage as JSON. - Functions must be of the signature `(T) -> String`, where `T` is the type of the property.