Search code examples
c++jsonnlohmann-json

Nothing dumped from json that converted from bson


I need your help about nlohmann's json library. I wrote this code.

std::vector<std::uint8_t> v = nlohmann::json::to_bson(jInit);
std::vector<std::uint8_t> s;
for (auto& i : v)
{
    s.push_back(v[i]);
}
std::ofstream ofs(s_basePath + "dump.txt");
ofs << nlohmann::json::from_bson(s).dump();

This simply converts json to bson, then convert the bson to json and dump it as a text file.

For some reasons, I have to use push_back() and get json back.

The problem is, size of the dumped text file is 0 kb, nothing will be dumped.

I tried also this code and it is working.

std::vector<std::uint8_t> v = nlohmann::json::to_bson(jInit);
std::ofstream ofs(s_basePath + "dump.txt");
ofs << nlohmann::json::from_bson(v).dump();

I have no idea what's the difference between vector v and s.


Solution

  • The problem has nothing to do with /. It's just that you use every uint8_t in the original data as an index into the very same data, which scrambles everything up.

    Wrong:

    for (auto& i : v)
    {
        s.push_back(v[i]); // `i` is not an index
    }
    

    The correct loop should look like this:

    for (auto& i : v)
    {
        s.push_back(i);    // `i` is a reference to the actual data you should put in `s`
    }
    

    If you need a copy of the vector with the data, you can simply copy it though:

    s = v;