Scripting: JSON – Arma Reforger

From Bohemia Interactive Community
Revision as of 14:53, 1 June 2022 by Lou Montana (talk | contribs) (Page creation)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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).

{
}

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.
{
	"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:

{
	"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

«
« 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

{
	"m_sMessage": "Hello Message",
	"m_subObject": {
		"integerValue": 1,
		"booleanValue": true
	};
}


Script Usage

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