如何使用 nlhoman json 在 C++ 中将相同的键 json 数据合并为一个

How to merge same key json data into one in c++ using nlhoman json

我有以下 JSON 数据:

{
    "Created": "2019-08-01T14:36:49Z",
    "Tags": [

        {
            "ObjectId": "1",
            "Time": 6,
            "TrackerId": "W1"

        },

        {
            "ObjectId": "2",
            "Time": 4,
            "TrackerId": "E34"

        },
        {
            "ObjectId": "3",
            "Time": 4,
            "TrackerId": "W1"

        },
        {
            "ObjectId": "4",
            "Time": 8,
            "TrackerId": "E34"
        }
    ],
    "id": 0
}

在上面的 JSON 数据中,我们可以看到我们有 4 个对象 ID,但只有 2 个跟踪器 ID。我需要合并具有相同 TrackerId 的数据并添加它们的时间。所以上面的数据会变成:

{
    "Created": "2019-08-01T14:36:49Z",
    "Tags": [

        {
            "Time": 10,
            "TrackerId": "W1"

        },

        {
            "Time": 12,
            "TrackerId": "E34"

        }

    ],
    "id": 0
}

我正在为 C++ 使用 Nlohmann JSON library。我们怎样才能做到这一点?

您可以构建跟踪器的地图,然后将它们输入 JSON 对象:

json merge_objects(const json& data)
{
    std::map<std::string, int> times;
    for (const auto& entry : data["Tags"]) {
        times[entry["TrackerId"]] += static_cast<int>(entry["Time"]);
    }

    json result;
    result["Created"] = data["Created"];
    for (const auto& [id, time] : times) {
        json tag;
        tag["Time"] = time;
        tag["TrackerId"] = id;
        result["Tags"].push_back(tag);
    }
    return result;
}

(live demo)