At the moment StructArrays is a bit problematic with things that overload getproperty, because it tries to reconstruct the whole object (not just the namedtuple), so it gets a bit confused if the properties do not correspond to the fields (though this should be fixed in the next release).
The easiest is to do StructArray(Tables.columntable(jsnl)), where Tables.columntable gives you a named tuple of columns corresponding to the table.
OTOH, I suspect that a Vector{JSON3.Object} may already respect the Tables interface. For example, what happens if you do Tables.columntable(v::Vector{JSON3.Object})?