add to_json method for C arrays
If the array can be converted to basic_json::string_t, the overload in this commit is not chosen.
This commit is contained in:
parent
100bf3ef2c
commit
dbebf8de47
3 changed files with 511 additions and 1031 deletions
1519
src/json.hpp
1519
src/json.hpp
File diff suppressed because it is too large
Load diff
|
@ -800,6 +800,13 @@ void to_json(BasicJsonType& j, const CompatibleObjectType& arr)
|
||||||
external_constructor<value_t::object>::construct(j, arr);
|
external_constructor<value_t::object>::construct(j, arr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename BasicJsonType, typename T, std::size_t N,
|
||||||
|
enable_if_t<not std::is_constructible<
|
||||||
|
typename BasicJsonType::string_t, T (&)[N]>::value,
|
||||||
|
int> = 0>
|
||||||
|
void to_json(BasicJsonType &j, T (&arr)[N]) {
|
||||||
|
external_constructor<value_t::array>::construct(j, arr);
|
||||||
|
}
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
// from_json //
|
// from_json //
|
||||||
|
|
|
@ -190,6 +190,20 @@ TEST_CASE("value conversion")
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("built-in arrays")
|
||||||
|
{
|
||||||
|
const char str[] = "a string";
|
||||||
|
const int nbs[] = {0, 1, 2};
|
||||||
|
|
||||||
|
json j2 = nbs;
|
||||||
|
json j3 = str;
|
||||||
|
|
||||||
|
auto v = j2.get<std::vector<int>>();
|
||||||
|
auto s = j3.get<std::string>();
|
||||||
|
CHECK(std::equal(v.begin(), v.end(), std::begin(nbs)));
|
||||||
|
CHECK(s == str);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("std::deque<json>")
|
SECTION("std::deque<json>")
|
||||||
{
|
{
|
||||||
std::deque<json> a = j.get<std::deque<json>>();
|
std::deque<json> a = j.get<std::deque<json>>();
|
||||||
|
|
Loading…
Reference in a new issue