Scripting: JSON – Arma Reforger
Lou Montana (talk | contribs) (Page creation) |
mNo edit summary |
||
Line 161: | Line 161: | ||
class SecondaryJSONClass : JsonApiStruct | class SecondaryJSONClass : JsonApiStruct | ||
{ | { | ||
SecondaryJSONClass() {} // Important, if you have a constructor it needs to take 0 parameters, as the engine will construct this class when you parse a json file. | |||
int integerValue; | int integerValue; | ||
bool booleanValue; | bool booleanValue; |
Revision as of 13:22, 7 June 2022
JSON Format
JSON stands for JavaScript Object Notation. It is a way to present data in a simple form.
The parent class is always an object (the O from JSON).
{
}
A property is defined with its name on the left of the colon, and its value on the right. Properties and strings are defined by double-quotes ".
If another property follows, a comma is required. If no other property follows, there must be no comma.
{
"property": 42
}
{
"property1": 41,
"property2": "fourty-two"
}
Spacing does not matter outside of the quotes.
{
"property1": "name",
"property2": 42
}
is identical to
{"property1":"name","property2":42}
but for obvious readability reasons, tabs and spaces are welcome.
Boolean
A boolean can be either true or false and nothing else.
{
"boolean1": true,
"boolean2": false
}
Number
A number can be either an integer or a float. There are no quotes around it. It cannot start with a period .. Scientific notations are accepted.
{
"number1": 42,
"number2": 4.2,
"number3": -33,
"number4": 10e10
}
String
Line returns cannot happen in JSON strings. The following character escape sequences are accepted:
\b \f \r \n \t \" \ \ - \
/ \u#### - see Unicode chars
{
"string1": "This is a string",
"string2": "Is \"this\" a string?\tYes, Sir\u0021"
}
Object
{
"object1": {
"property1": "sub-object"
}
}
The null value is covered.
{
"object1": null
}
Array
An array can contain anything: direct values, or other objects with named properties.
{
"array1": [
4,
5,
6
],
"array2": ["This", "is", "Sparta!"],
"array3": [
{
"name": "object's name",
"value": 33
},
{ "name": "another object, inlined", "value": 42 }
]
}
Hydration
- Properties must be named the same in JSON and in the Enforce Script object. They are case-sensitive!
- A missing property will not fail the JSON hydration.
Example
JSON Structure
MainClass.json
{
"m_sMessage": "Hello Message",
"m_subObject": {
"integerValue": 1,
"booleanValue": true
};
}
Script Usage
class SecondaryJSONClass : JsonApiStruct
{
SecondaryJSONClass() {} // Important, if you have a constructor it needs to take 0 parameters, as the engine will construct this class when you parse a json file.
int integerValue;
bool booleanValue;
}
class MainJSONClass : JsonApiStruct
{
protected string m_sMessage; // names need to match the JSON property name
protected SecondaryJSONClass m_subObject;
void Hydrate()
{
LoadFromFile("MainClass.json"); // loads JSON in the calling class
Print("m_sMessage = " + m_sMessage); // Prints "Hello Message"
Print("is sub-object null: " + (m_subObject == null));
if (m_subObject)
{
Print("sub-object/integerValue = " + m_subObject.integerValue);
Print("sub-object/booleanValue = " + m_subObject.booleanValue);
}
}
}