Re: json-stream-read should validate json too
Amirouche Boubekki 21 Jan 2020 10:47 UTC
Le mar. 21 janv. 2020 à 10:15, Duy Nguyen <xxxxxx@gmail.com> a écrit :
>
> I feel that without validation it's more like a tokenizer than an
> actual parser. Anybody who wants to use it will have to implement
> duplicated validation logic (and could get it wrong if they're not
> careful). Is it possible to adjust the interface to move validation
> back inside json-stream-read (or at least an option to include
> validation)?
Good idea. (That procedure used to be called json-tokenizer).
>
> Something like srfi-171 "transducers" could help make a
> container-independent json stream parser. The exact data type for
> arrays and objects are controlled by transducers (though I haven't
> really worked it out yet). Transducers seem a good fit for this to
> potentially create large data structures with minimum intermediate
> copies.
Like I said, in the other thread I am willing to use a generator. One
could add a generator->transducer. Neither I am well versed to
transducer art. It seems to me generators can do what transducers do
(with a little more work to represent intermediate results).
> Alternatively maybe we can wrap user-provided 'proc' in our own proc
> that does validation on top, something like a stripped down version of
> %json-read that does nothing but validate? For example,
> make-json-validator takes a proc and returns a new proc also performs
> validation.
I will look at it, it seems to me if one can validate inside
json-stream-read, it will be more useful.
Also, I was thinking about adding a parameters like
`json-maximum-nesting-level` that would be 501 by default. And that
will control the reader, in case there is 501 or more nested JSON
array or object, json-stream-reader will raise a json-error? What do
you think?
--
Amirouche ~ https://hyper.dev