RFC: std.json sucessor

Sönke Ludwig via Digitalmars-d digitalmars-d at puremagic.com
Fri Aug 22 09:48:42 PDT 2014


Am 22.08.2014 18:15, schrieb "Marc Schütz" <schuetzm at gmx.net>":
> Some thoughts about the API:
>
> 1) Instead of `parseJSONValue` and `lexJSON`, how about static methods
> `JSON.parse` and `JSON.lex`, or even a module level functions
> `std.data.json.parse` etc.? The "JSON" part of the name is redundant.

For those functions it may be acceptable, although I really dislike that 
style, because it makes the code harder to read (what exactly does this 
parse?) and the functions are rarely used, so that that typing that 
additional "JSON" should be no issue at all. On the other hand, if you 
always type "JSON.lex" it's more to type than just "lexJSON".

But for "[JSON]Value" it gets ugly really quick, because "Value"s are 
such a common thing and quickly occur in multiple kinds in the same 
source file.

>
> 2) Also, `parseJSONValue` and `parseJSONStream` probably don't need to
> have different names. They can be distinguished by their parameter types.

Actually they take exactly the same parameters and just differ in their 
return value. It would be more descriptive to name them parseAsJSONValue 
and parseAsJSONStream - or maybe parseJSONAsValue or parseJSONToValue? 
The current naming is somewhat modeled after std.conv's "to!T" and 
"parse!T".

>
> 3) `toJSONString` shouldn't just take a boolean as flag for
> pretty-printing. It should either use something like `Pretty.YES`, or
> the function should be called `toPrettyJSONString` (I believe I have
> seen this latter convention elsewhere).
> We should also think about whether we can just call the functions
> `toString` and `toPrettyString`. Alternatively, `toJSON` and
> `toPrettyJSON` should be considered.

Agreed, a boolean isn't good for a public interface, renaming the 
current writeAsString to private writeAsStringImpl and then adding 
"(writeAs/to)[Pretty]String" sounds reasonable. Actually I've done it 
that way for vibe.data.json.


More information about the Digitalmars-d mailing list