It is very convenient to implement an isuperobject interface through the superobject public function so;
A string parameter can be any type or even a constant array.
Both SA and so return an isuperobject;
So can generate an isuperobject of starray type, but SA will only generate isuperobject of starray type;
The SA parameter can only be a constant array.
Unit unit1; interfaceuses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, stdctrls; Type tform1 = Class (tform) button1: tbutton; button2: tbutton; procedure button1click (Sender: tobject); Procedure button2click (Sender: tobject); end; var form1: tform1; implementation {$ R *. DFM} uses superobject, typinfo; Procedure tform1.button1click (Sender: tobject); var JO: isuperobject; begin JO: = So (['A', 1, 'B', 2.5, 'C', 'xyz', 'D', true]); showmessage (Jo. asjson); // {"D": True, "C": "XYZ", "B": 2.5, "": 1} {display type name} showmessage (getenumname (typeinfo (tsupertype), ord (Jo. datatype); // stobject JO: = So (3.14); showmessage (Jo. asjson); // 3.14 {display type name} showmessage (getenumname (typeinfo (tsupertype), ord (Jo. datatype); // stdouble JO: = SA (['A', 1, 'B', 2.5, 'C', 'xyz', 'D ', true]); showmessage (Jo. asjson); {display type name} showmessage (getenumname (typeinfo (tsupertype), ord (Jo. datatype); // starrayend; // SA, for example, procedure tform1.button2click (Sender: tobject); var Jo, ja: isuperobject; begin JA: = SA (['x ', 'y', 'z']); JO: = So ('{A: 1, B: 2}'); JO ['B']: = JA; showmessage (Jo. asjson); // {"B": ["X", "Y", "Z"], "A": 1} end; end.