2017-03-09 01:22 jsonDoc110 [permalink]
While working on TRethinkDB, I noticed something was wrong with document re-use. My original idea was to re-use a single IJSONDocument instance to process a list of similar documents, but keep the set of keys allocated, only overwriting the values from the new document. (If you're interested about the code, search jsonDoc.pas
for FLoadIndex
.) Nothing an extra internal-use interface can't fix. Then I noticed that IJSONDocument.ToString
could do with a revision because it wasn't using the new IJSONEnumerator
, though it should.
Then I noticed the feature I once added to function JSON
, where you could declare embedded documents by listing a value of '['
, and closing the document with a key of ']'
. The problem is that '['
could be a perfectly valid value! If it were to come via a variable, that would change the behaviour of the JSON call, and that's a big no-no. Also square brackets usually mean arrays in JSON-land, so it's perhaps confusing that I chose square brackets because you already need them in the JSON([...])
call. So I changed it into a key suffix of '{'
, and a closing key of '}'
, counting on braces being really abnormal in key names. If you really need a key name that ends with '{', don't use the JSON function, but just d['x{']:='y';
A minor downside may be that JSON calls with braces in the string constants, break the comment block if you want to comment out a section of code with braces, but there's always (* *)
or //
. It by far doesn't outweigh how elegant this new solution is, but it's a breaking change (existing code using '[' values won't work correctly any more), so instead of version 1.0.6 I think it deserves a jump in minor version number to 1.1.0.
While I was at it I fixed some minor issues with jsonV, so remember to update that one as well. Hope you enjoy the changes. (Next up may be replacing TMongoWire's bsonDoc with jsonDoc...)