std.data.json formal review

Sönke Ludwig via Digitalmars-d digitalmars-d at puremagic.com
Tue Aug 4 06:10:09 PDT 2015


Am 03.08.2015 um 23:15 schrieb deadalnix:
> On Tuesday, 28 July 2015 at 14:07:19 UTC, Atila Neves wrote:
>> Start of the two week process, folks.
>>
>> Code: https://github.com/s-ludwig/std_data_json
>> Docs: http://s-ludwig.github.io/std_data_json/
>>
>> Atila
>
> Looked in the doc (
> http://s-ludwig.github.io/std_data_json/stdx/data/json/value/JSONValue.html
> ). I wanted to know how JSONValue can be manipulated. That is not very
> explicit.
>
> First, it doesn't looks like the value can embed null as a value. null
> is a valid json value.

The documentation is lacking, I'll improve that. JSONValue includes an 
alias this to an Algebraic, which provides the actual data API. Its type 
list includes typeof(null).

>
> Secondly, it seems that it accept bigint. As per JSON spec, the only
> kind of numeric value you can have in there is a num, which doesn't even
> make the difference between floating point and integer (!) and with 53
> bits of precision. By having double and long in there, we are already
> way over spec, so I'm not sure why we'd want to put bigint in there.

See also my reply a few posts back. JSON does not specify anything WRT 
the precision or length of numbers. In the ECMA standard it is mentioned 
explicitly that this was done so that applications are not limited in 
what kind of numbers can be transferred. The only thing explicitly 
mentioned is that implementations *may* choose to support only 64-bit 
floats. But large integer numbers are used in practice, so we should be 
able to handle those, too (one way or another).

>
> Finally, I'd love to see that JSONValue to exhibit a similar API than
> jsvar.
>

This is how it used to be in the vibe.data.json module. I consider that 
to be a mistake now for multiple reasons, at least on this abstraction 
level. My proposal would be to have a clean, "strongly typed" JSONValue 
and a generic jsvar like struct on top of that, which is defined 
independently, and could for example work on a BSONValue, too. The usage 
would simply be "var value = parseJSONValue(...);".


More information about the Digitalmars-d mailing list