如何使用 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;
}
我有以下 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;
}