JsonApiStruct Usage – Arma Reforger
Lou Montana (talk | contribs) m (Fix) |
Lou Montana (talk | contribs) m (Fix varnames) |
||
Line 18: | Line 18: | ||
== How To == | == How To == | ||
* Create your own class by inheriting JsonApiStruct | * Create your own class by inheriting {{Link/Enfusion|armaR|JsonApiStruct}} | ||
* Register all variables you require in constructor of object | * Register all variables you require in constructor of object | ||
* Create hierarchy from objects if you need more complex structures | * Create hierarchy from objects if you need more complex structures | ||
Line 90: | Line 90: | ||
== File Operations == | == File Operations == | ||
You can store | You can store your object into file (ie. invoke Pack + Save to file) or you can just save already packed JSON (Save to File). | ||
=== File Import === | === File Import === | ||
Line 145: | Line 145: | ||
* If JSON is expanded onto given object or hierarchy and variable name && format match, variables are filled with appropriate data | * If JSON is expanded onto given object or hierarchy and variable name && format match, variables are filled with appropriate data | ||
* If JSON is assembled from given object or hierarchy, variable content is used to create JSON structures | * If JSON is assembled from given object or hierarchy, variable content is used to create JSON structures | ||
* float, int, | * float, int, bool, string, array, object and array of objects are supported | ||
* automatic allocation of object | * automatic allocation of object | ||
* getting JSON as string | * getting JSON as string | ||
Line 206: | Line 206: | ||
// no additional scripting required unless you want to handle something specific or debug perhaps | // no additional scripting required unless you want to handle something specific or debug perhaps | ||
// you can also use | // you can also use its data as string | ||
Print(dummy.AsString()); | Print(dummy.AsString()); | ||
} | } | ||
Line 215: | Line 215: | ||
<enforce> | <enforce> | ||
// assuming you have variables declared upon JsonApiStruct itself! | // assuming you have variables declared upon JsonApiStruct itself! | ||
float | float m_fMyFloat; | ||
// add simple variable | // add simple variable | ||
void OnPack() | void OnPack() | ||
{ | { | ||
StoreFloat("MyFloat", | StoreFloat("MyFloat", m_fMyFloat); | ||
} | } | ||
</enforce> | </enforce> | ||
Line 228: | Line 228: | ||
<enforce> | <enforce> | ||
// assuming variables are declared upon JsonApiStruct itself | // assuming variables are declared upon JsonApiStruct itself | ||
float | float m_fMyFloat; | ||
int | int m_iMyInt; | ||
protected ref AvatarStruct m_Avatar; // AvatarStruct extends JsonApiStruct | protected ref AvatarStruct m_Avatar; // AvatarStruct extends JsonApiStruct | ||
Line 235: | Line 235: | ||
void OnPack() | void OnPack() | ||
{ | { | ||
StoreFloat("MyFloat", | StoreFloat("MyFloat", m_fMyFloat); | ||
StoreInt("MyInt", | StoreInt("MyInt", m_iMyInt); | ||
StoreObject("avatar", m_Avatar); | StoreObject("avatar", m_Avatar); | ||
} | } | ||
Line 245: | Line 245: | ||
<enforce> | <enforce> | ||
// assuming the array is declared upon JsonStruct itself | // assuming the array is declared upon JsonStruct itself | ||
protected ref array<string> | protected ref array<string> m_aItems = {}; | ||
// add array and its items | // add array and its items | ||
void OnPack() | void OnPack() | ||
{ | { | ||
StartArray(" | StartArray("m_aItems"); | ||
foreach (string item : m_aItems) | |||
{ | { | ||
ItemString( | ItemString(item); | ||
} | } | ||
EndArray(); | EndArray(); |
Revision as of 16:33, 19 June 2023
JsonApiStruct is scripted object with support to:
- Encode script object/ variable to JSON format
- Decode data from JSON format onto script object/ variable
- Import/export from/to file
- Import/export from/to string
It can also be used as callback object when handling responses from Backend API (script) where incoming data are automatically expanded.
How To
- Create your own class by inheriting JsonApiStruct
- Register all variables you require in constructor of object
- Create hierarchy from objects if you need more complex structures
Simple Declaration
Hierarchy Declaration
File Operations
You can store your object into file (ie. invoke Pack + Save to file) or you can just save already packed JSON (Save to File).
File Import
File Export
Packing
Packing is fairly easy, when object is either asked by thread/callback or invoked manually to pack its data, the OnPack() event method is called.
Automated Packing/Expanding
To make things easier, it is possible to work with a JSON object just by registering variables and object into JsonApiStruct.
What Works | What Doesn't |
---|---|
|
|
Variables
Objects and Variables
If the OnPack() event method is declared upon children objects, it is called upon them hierarchically as well.
Error Handling
If you use object as a callback and an error happen during JSON processing, it generates events upon that very object:
Error Codes
As defined in EJsonApiError:
Code Enum | Description |
---|---|
ETJSON_UNKNOWN | General error - not implemented |
ETJSON_OK | This is generated upon sucessfull processing at onSuccess() event |
ETJSON_COMMSEND | Sending of object failed (callback got error code) |
ETJSON_COMMRECV | Receiving of object failed (callback got error code) |
ETJSON_PARSERERROR | Parsing process failed - invalid data or corrupted format? |
ETJSON_PACKNOSTART | Packing process cannot start - invalid state or other problems |
ETJSON_TIMEOUT | Failed to send data due to timeout (when JsonStruct data is sent via RestApi or BackendApi |
ETJSON_NOBUFFERS | Too many objects processed at once! |
ETJSON_FAILFILELOAD | Could not load file with JSON data |
ETJSON_FAILFILESAVE | Could not save file with JSON data |
JSON Validation
JSON validation allows to test the input/output values.
Result structure can be used as input as well and it should match in the end, similar process can be used for verifying already existing structures.
Packing object will produce a long, non-formatted string like:
{"m_bool":false,"m_int":1024,"m_double":1.2345678806304932,"m_string":"Hello I am your new string!","m_objects":{"obj1":{"name":"Van Ceulen","year":"1706","val":3.1415927410125734},"obj2":{"name":"Bernoulli","year":"1683","val":0.5772156715393066},"obj3":{"name":"Feidius","year":"430BC","val":1.6180340051651}}}
Use suitable online/other tool for readable structure, result can be stored to textfile and compared by binary/text compare tool if neccessary.