JsonApiStruct Usage – Arma Reforger
Lou Montana (talk | contribs) m (Fix varnames) |
Lou Montana (talk | contribs) m (Some wiki formatting) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 2: | Line 2: | ||
'''{{Link/Enfusion|armaR|JsonApiStruct}}''' is scripted object with support to: | '''{{Link/Enfusion|armaR|JsonApiStruct}}''' is scripted object with support to: | ||
* Encode script object/ variable to JSON format | * Encode script object/variable to JSON format | ||
* Decode data from JSON format onto script object/ variable | * Decode data from JSON format onto script object/ variable | ||
* Import/export from/to file | * Import/export from/to file | ||
Line 10: | Line 10: | ||
{{Feature|informative| | {{Feature|informative| | ||
JsonApiStruct is primarily meant for automatic data "conversion" from JSON to script - but it is also possible to assemble JSON using object's API: | {{Link/Enfusion|armaR|JsonApiStruct}} is primarily meant for automatic data "conversion" from JSON to script - but it is also possible to assemble JSON using object's API: | ||
# by using the variable registration system - based upon additional variable registering ''via'' the <enforce inline>RegV()</enforce> (Register Variable) method | # by using the variable registration system - based upon additional variable registering ''via'' the <enforce inline>RegV()</enforce> (Register Variable) method | ||
# as general stream assembly - by calling | # as general stream assembly - by calling methods to add values, object or starting arrays | ||
}} | }} | ||
Line 95: | Line 95: | ||
<enforce> | <enforce> | ||
// unpack from RAW data - either put data there manually (JSON!) or | // unpack from RAW data - either put data there manually (JSON!) or its callback result | ||
void UnpackFromRAW(string data) | void UnpackFromRAW(string data) | ||
{ | { | ||
Line 140: | Line 140: | ||
{| class="wikitable valign-top" | {| class="wikitable valign-top" | ||
! What Works | ! What Works | ||
! What | ! What Does not | ||
|- | |- | ||
| | | | ||
* If JSON is expanded onto given object or hierarchy and variable name | * If JSON is expanded onto given object or hierarchy and variable name and 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, bool, string, array, object and array of objects are supported | * float, int, bool, string, array, object and array of objects are supported | ||
Line 149: | Line 149: | ||
* getting JSON as string | * getting JSON as string | ||
| | | | ||
* Even though the JSON format does support it | * Even though the JSON format does support it, multi-type arrays (like combined strings and integers) are not supported by Enforce Script | ||
* Declaration of variables or objects - if there is no adequate variable present on during expand, it is ignored - if an object type is missing, it cannot be expanded | * Declaration of variables or objects - if there is no adequate variable present on during expand, it is ignored - if an object type is missing, it cannot be expanded | ||
|} | |} | ||
Line 364: | Line 364: | ||
{"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}}} | {"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 | Use suitable online/other tool for readable structure, result can be stored to textfile and compared by binary/text compare tool if necessary. | ||
{{Feature|informative| | {{Feature|informative| |
Latest revision as of 00:11, 16 July 2024
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 Does not |
---|---|
|
|
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 necessary.