mirror of
https://github.com/nlohmann/json.git
synced 2026-07-09 12:05:10 +00:00
📡 Document cross-basic_json conversion limitation (#3425)
When converting objects or strings between different basic_json specializations, the target's object_t::key_type or string_t must be directly constructible from the source's corresponding type. If this requirement is not met, the conversion silently falls back to the array-conversion path, producing incorrect results. This documents the limitation and provides references to issue #3425, which tracks this behavior. The comment in unit-alt-string.cpp is clarified to reference the known limitation with a link to the issue, and suggests the parse() workaround. Fixes #3425 (documentation; full fix deferred pending type-trait redesign) Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
@@ -322,14 +322,12 @@ TEST_CASE("alternative string type")
|
||||
|
||||
SECTION("JSON pointer")
|
||||
{
|
||||
// conversion from json to alt_json fails to compile (see #3425);
|
||||
// attempted fix(*) produces: [[['b','a','r'],['b','a','z']]] (with each char being an integer)
|
||||
// (*) disable implicit conversion for json_refs of any basic_json type
|
||||
// alt_json j = R"(
|
||||
// {
|
||||
// "foo": ["bar", "baz"]
|
||||
// }
|
||||
// )"_json;
|
||||
// Direct conversion from a json literal to alt_json is not supported due to issue #3425:
|
||||
// alt_json's string_t (alt_string) is not directly constructible from std::string, so the
|
||||
// cross-basic_json conversion falls back to the array-conversion path, incorrectly representing
|
||||
// objects as arrays of [key, value] pairs and strings as arrays of character codes.
|
||||
// See https://github.com/nlohmann/json/issues/3425 for details.
|
||||
// Workaround: use alt_json::parse() instead of implicit conversion.
|
||||
auto j = alt_json::parse(R"({"foo": ["bar", "baz"]})");
|
||||
|
||||
CHECK(j.at(alt_json::json_pointer("/foo/0")) == j["foo"][0]);
|
||||
|
||||
Reference in New Issue
Block a user