Scripting: JSON – Arma Reforger

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "<syntaxhighlight lang="c#">" to "<enforce>")
m (Text replacement - "</syntaxhighlight>" to "</enforce>")
Line 17: Line 17:
{
{
}
}
</syntaxhighlight>
</enforce>


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''' {{hl|"}}.<br>
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''' {{hl|"}}.<br>
Line 28: Line 28:
"property": 42
"property": 42
}
}
</syntaxhighlight>
</enforce>
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
Line 34: Line 34:
"property2": "fourty-two"
"property2": "fourty-two"
}
}
</syntaxhighlight>
</enforce>


Spacing does not matter outside of the quotes.
Spacing does not matter outside of the quotes.
Line 42: Line 42:
"property2": 42
"property2": 42
}
}
</syntaxhighlight>
</enforce>
is identical to
is identical to
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{"property1":"name","property2":42}
{"property1":"name","property2":42}
</syntaxhighlight>
</enforce>
but for obvious readability reasons, tabs and spaces are welcome.
but for obvious readability reasons, tabs and spaces are welcome.


Line 57: Line 57:
"boolean2": false
"boolean2": false
}
}
</syntaxhighlight>
</enforce>


=== Number ===
=== Number ===
Line 69: Line 69:
"number4": 10e10
"number4": 10e10
}
}
</syntaxhighlight>
</enforce>


=== String ===
=== String ===
Line 91: Line 91:
"string2": "Is \"this\" a string?\tYes, Sir\u0021"
"string2": "Is \"this\" a string?\tYes, Sir\u0021"
}
}
</syntaxhighlight>
</enforce>


=== Object ===
=== Object ===
Line 101: Line 101:
}
}
}
}
</syntaxhighlight>
</enforce>


The null value is covered.
The null value is covered.
Line 108: Line 108:
"object1": null
"object1": null
}
}
</syntaxhighlight>
</enforce>


=== Array ===
=== Array ===
Line 129: Line 129:
]
]
}
}
</syntaxhighlight>
</enforce>




Line 153: Line 153:
};
};
}
}
</syntaxhighlight>
</enforce>




Line 185: Line 185:
}
}
}
}
</syntaxhighlight>
</enforce>





Revision as of 19:18, 30 July 2022

JSON Format

JSON stands for JavaScript Object Notation. It is a way to present data in a simple form.

See:

The parent class is always an object (the O from JSON). <syntaxhighlight lang="json"> { } </enforce>

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.

There can be no comments in a JSON file.

<syntaxhighlight lang="json"> { "property": 42 } </enforce> <syntaxhighlight lang="json"> { "property1": 41, "property2": "fourty-two" } </enforce>

Spacing does not matter outside of the quotes. <syntaxhighlight lang="json"> { "property1": "name", "property2": 42 } </enforce> is identical to <syntaxhighlight lang="json"> {"property1":"name","property2":42} </enforce> but for obvious readability reasons, tabs and spaces are welcome.

Boolean

A boolean can be either true or false and nothing else. <syntaxhighlight lang="json"> { "boolean1": true, "boolean2": false } </enforce>

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. <syntaxhighlight lang="json"> { "number1": 42, "number2": 4.2, "number3": -33, "number4": 10e10 } </enforce>

String

Line returns cannot happen in JSON strings. The following character escape sequences are accepted:

<syntaxhighlight lang="json"> { "string1": "This is a string", "string2": "Is \"this\" a string?\tYes, Sir\u0021" } </enforce>

Object

<syntaxhighlight lang="json"> { "object1": { "property1": "sub-object" } } </enforce>

The null value is covered. <syntaxhighlight lang="json"> { "object1": null } </enforce>

Array

An array can contain anything: direct values, or other objects with named properties. <syntaxhighlight lang="json"> { "array1": [ 4, 5, 6 ], "array2": ["This", "is", "Sparta!"], "array3": [ { "name": "object's name", "value": 33 }, { "name": "another object, inlined", "value": 42 } ] } </enforce>


Hydration

«
« Hydration refers to the process of filling an object with data. » (source)
  • 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 <syntaxhighlight lang="json"> { "m_sMessage": "Hello Message", "m_subObject": { "integerValue": 1, "booleanValue": true }; } </enforce>


Script Usage

class SecondaryJSONClass : JsonApiStruct { void 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); } } }


Serialisation