[Libwebsockets] LEJP array parsing
Andy Green
andy at warmcat.com
Sat Nov 6 09:26:15 CET 2021
On 11/4/21 12:05, Aurélien Vallée wrote:
> Say I have the following JSON object:
>
> {
> "array1": [["a", "b"], ["c", "d"]],
> "array2": [["e", "f"], ["g", "h"]]
> }
>
> I am trying to parse it with LEJP without having to re-implement
> stateful array parsing in my callback.
You're doing the right things, but lejp needs more love to support what
you want. I pushed some patches on main that...
a) add support for leading wildcards in path matches, like "*[]"
b) add a .flags in the lejp ctx that lets you elect to have breaking
features in the context, and define a flag LEJP_FLAG_FEAT_OBJECT_INDEXES
that tracks indexes for hierarchies of { x, y, z } the same as [ x, y, z
]. This also fixes the 2 / 3 level problem you found, without the flag
it partly understands { , } index tracking, but only because it saw a
comma. The flag makes it understand { represents an index level by
itself too. This flags field gives us a way to keep evolving lejp
without causing trouble for people who are not hitting the problems
being fixed.
c) Improve the unit test for lejp to check the parsing results for the
tests, and check your case both without (for backwards compatibility)
and with the new flag
d) Add some docs in the README about it
> Also, I did not find where in the callback I could retrieve the array
> indexes, which would be very helpful during parsing
It is in the README now, ctx->ipos is the depth of the indexable
hierarchy and ctx->i[] are the (uint16_t) counts for each level.
-Andy
More information about the Libwebsockets
mailing list