Самое простое, что вы можете сделать, это использовать, где вы можете, std::array
вместо C массивов. std::array
- это аналог C ++ для простых массивов, который добавляет все полезные вещи из std::vector
, такие как size()
и итераторы. Вы также можете вернуть их из функций, в отличие от C массивов.
nlohmann также поддерживает их автоматически:
auto parsed = json.get<std::array<Test, 2>>();
Не уверен насчет поддержки библиотек для простых старых C массивов. Но вы можете написать вспомогательную функцию с небольшим шаблоном magi c:
template <typename T, size_t N>
void from_json(const nlohmann::json& j, T (&t)[N]) {
if (j.size() != N) {
throw std::runtime_error("JSON array size is different than expected");
}
size_t index = 0;
for (auto& item : j) {
from_json(item, t[index++]);
}
}
Использование:
Test my_array[N];
from_json(json, my_array);
Демо: https://godbolt.org/z/-jDTdj