nlohmann / json

JSON for Modern C++
https://json.nlohmann.me
MIT License
41.3k stars 6.58k forks source link

Exception when trying to insert my json object inside json file #4239

Open marfixdev opened 6 months ago

marfixdev commented 6 months ago

Description

I'm trying to append my json object to inside a json file.

Reproduction steps

Bug occurs when trying to .insert()

Expected vs. actual results

This is how my json file looks like

{ "Base3": [ { "Name": "Base3", "X": 69, "Y": 999, "Z": 999 } ], "Base4": [ { "Name": "Base4", "X": 69, "Y": 999, "Z": 999 } ], "Base5": [ { "Name": "Base5", "X": 69, "Y": 999, "Z": 999 } ] }

What I expected ;

{ "Base3": [ { "Name": "Base3", "X": 69, "Y": 999, "Z": 999 } ], "Base4": [ { "Name": "Base4", "X": 69, "Y": 999, "Z": 999 } ], "Base5": [ { "Name": "Base5", "X": 69, "Y": 999, "Z": 999 } ], "Base6": [ { "Name": "Base6", "X": 22, "Y": 33, "Z": 11 } ] }

Minimal code example

using Json = nlohmann::json;
int main()
{

    Json Data;
    std::string Name = "Base6";
    float xx = 22;
    float yy = 33;
    float zz = 11;

    Data[Name]["Name"] = Name;
    Data[Name]["X"] = xx;
    Data[Name]["Y"] = yy;
    Data[Name]["Z"] = zz;

    std::fstream filewrite;
    filewrite.open("coords.json", std::ios::out | std::ios::in);

    Json existingjson = Json::parse(filewrite);
    filewrite.seekg(0, filewrite.beg);
    existingjson.insert(existingjson.begin(), Data);
    filewrite << existingjson;

}

Error messages

Unhandled exception at 0x00007FF8101F565C in JSON.exe: Microsoft C++ exception: nlohmann::json_abi_v3_11_2::detail::type_error at memory location 0x000000000014FC80.

Compiler and operating system

MSVC 14.38 / WINDOWS11

Library version

3.11.2

Validation

nomadwolf0 commented 6 months ago

json::insert() only operates on arrays, not objects in the form you used. (Form (1) at the API documentation.). Only Form (5) of insert() is for inserting into objects.

You should be using json::update().

nlohmann commented 6 months ago

The type_error exception should provide more information in the what string. If you print it, it should probably indicate what @nomadwolf0 wrote.

edvardsanta commented 6 months ago

I tried to reproduce the error and it is showing a good exception actually. image

nlohmann commented 6 months ago

@marfixdev Can I close this issue?