Как я могу сериализовать 2 набора с помощью nlohmann/json.hpp

У меня есть два неупорядоченных набора пар (X,Y), реализованных с использованием форс-хэша, и я хотел бы преобразовать их в файл Json, который имеет специальный формат.

unordered_set<pair<int,int>> visited, cleaned

, Я хочу, чтобы они были представлены таким образом в формате Json, используя nlohmann/json.hpp C++:

{
  "visited": [
    {
      "X": 2,
      "Y": 2
    },
    {
      "X": 3,
      "Y": 0
    },
    {
      "X": 3,
      "Y": 1
    },
    {
      "X": 3,
      "Y": 2
    }
  ],
  "cleaned": [
    {
      "X": 2,
      "Y": 2
    },
    {
      "X": 3,
      "Y": 0
    },
    {
      "X": 3,
      "Y": 2
    }
  ],
}

Может кто-нибудь помочь мне с кодом C++ для этой части? мой код

for (auto it = visited.begin(); it != visited.end(); ++it)
    {
        j2["visited"]["X"]=it->second;
        j2["visited"]["Y"] = it->first;
    }   
    for (auto it = cleaned.begin(); it != cleaned.end(); ++it)
    {
        j2["cleaned"]["X"] = it->second;
        j2["cleaned"]["Y"] = it->first;
    }

и это производит:

{
    "cleaned": {
        "X": 3,
        "Y": 2
    },
    "visited": {
        "X": 3,
        "Y": 2
    }
}

1 ответ

Решение

Желаемый формат JSON содержит массивы. Используйте что-то вроде этого, чтобы явно создать их:

nlohmann::json arr;
for (auto it = visited.begin(); it != visited.end(); ++it) {
    nlohmann::json o;
    o["X"] = it->second;
    o["Y"] = it->first;
    arr.push_back(o);
}

j2["visited"] = arr;

И аналогично для второй части.

Другие вопросы по тегам