Если вам нужно быстрое, простое, ненавязчивое решение, которое будет работать в большинстве случаев раз, тогда я бы сказал, просто проверьте индекс 1 - если он существует, таблица является массивом.Конечно, нет никакой гарантии, но по моему опыту, таблицы редко имеют как цифровые, так и другие ключи.Приемлемо ли для вас ошибочно принимать некоторые объекты за массивы и ожидаете ли вы, что это часто случается, зависит от вашего сценария использования - я думаю, что это нехорошо для общей библиотеки JSON.
Редактировать: Для науки я пошел посмотретькак Lua CJSON делает вещиОн просматривает все пары и проверяет, являются ли все ключи целыми числами, сохраняя при этом максимальный ключ (соответствующая функция - lua_array_length
).Затем он решает, следует ли сериализовать таблицу в виде массива или объекта, в зависимости от того, насколько разреженной является таблица (это соотношение контролируется пользователем), то есть таблица с индексами 1,2,5,10, вероятно, будет сериализована в виде массива, а таблица синдексы 1,2,1000000 пойдут как объект.Полагаю, это действительно неплохое решение.