On Fri, 20 Jul 2018, Bo Berglund via Lazarus wrote:

On Fri, 20 Jul 2018 20:09:25 +0300, AlexeyT via Lazarus
<lazarus@lists.lazarus-ide.org> wrote:


The config data are stored in a record and consists of a mix of data
types like strings and numbers as well as booleans.
Is there a simple way to encode the record as a JSON message

Yes, it is. You can write to json values by path: /dir1/dir2/dir3/key,

so for your record, make string paths for your values: /myrec/keybool ; /myrec/keyint ; ...


I am not sure I understand your suggestion...

I was thinking something like this (based on an example in the wiki
(http://wiki.freepascal.org/Streaming_JSON):

type TMyRecord = record
   checksum: word;
   ssid: AnsiString;
   passwd: AnsiString;
   macaddr: AnsiString;
   addr: TIpAddress;
   baud: integer;
   tcpport: word;
   mode: byte;
   channel: byte;
   hidden: byte;  // hidden (1) or visible (0)
   fixedaddress: byte; //Station mode fixed addr instead of DHCP
   numsensors: byte; //Number of active DHT sensors (0..3)
   dhtinterval: word;  // Interval between DHT sensor readings (min)
   host: AnsiString;
   reserved: array[0..18] of byte;
 end;


function RecToJSON(RC: TMyrecord): string;
var
 JS: TJSONStreamer;
begin
 JS := TJSONStreamer.Create(NIL);
 try
   JS.Options := JS.Options + [jsoTStringsAsArray];
   Result := JS.RecordToJSONString(RC);  //Seems not to exist...
 finally
   JS.Free;
 end;
end;

So I have two issues here:
1) It seems like there is no RecordToJSONString method only
ObjectToJSONString.

2) Do I have to convert my record to an object just to be able to use
JSON with it?

I want to avoid having to maintain a function where every member of
the record will be individually handled by name, then I don't gain
anything by going for JSON regarding future additions.
I want the output of the RecToJSON function to contain the field names
and current values of the record without ever changing this function
in the future when new fields are added....

Is this at all possible?

For classes it is possible, but not for records (yet). See the jsonrtti unit.

Michael.
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to