JsonApiStruct Usage – Arma Reforger
Lou Montana (talk | contribs) m (Some wiki formatting) |
Lou Montana (talk | contribs) m (Some wiki formatting) |
||
Line 149: | Line 149: | ||
* getting JSON as string | * getting JSON as string | ||
| | | | ||
* Even though JSON format does support it - we cannot deal with multi-type arrays, like combined strings and integers (Enforce script does not support arrays of various types) | * Even though the JSON format does support it - we cannot deal with multi-type arrays, like combined strings and integers (Enforce script does not support arrays of various types) | ||
* 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 368: | Line 368: | ||
{{Feature|informative| | {{Feature|informative| | ||
* {{Link|https://jsonformatter.org/|JSONFormatter.org}} offers a {{Link|https://jsonformatter.org/json-parser|JSON parser}} | * {{Link|https://jsonformatter.org/|JSONFormatter.org}} offers a {{Link|https://jsonformatter.org/json-parser|JSON parser}} | ||
{{Link|https://notepad-plus-plus.org/|Notepad++}} has the feature built-in; Plugins > JSON Viewer > Format JSON ({{Controls|Ctrl|Alt|Shift|M}}): <spoiler text="Show Result"> | * {{Link|https://notepad-plus-plus.org/|Notepad++}} has the feature built-in; Plugins > JSON Viewer > Format JSON ({{Controls|Ctrl|Alt|Shift|M}}): <spoiler text="Show Result"> | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { |
Revision as of 16:59, 12 January 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 you 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.