in inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/src/utils/parse_json.cc [38:104]
int32_t ParseJson::ParseProxyInfo(const std::string &inlong_group_id,
const std::string &meta_data,
ProxyInfoVec &proxy_info_vec,
GroupId2ClusterIdMap &group_id_2_cluster_id) {
rapidjson::Document doc;
if (doc.Parse(meta_data.c_str()).HasParseError()) {
return SdkCode::kErrorParseJson;
}
if (!(doc.HasMember(kJsonKeySuccess) && doc[kJsonKeySuccess].IsBool() &&
doc[kJsonKeySuccess].GetBool())) {
return SdkCode::kErrorParseJson;
}
if (!doc.HasMember(kJsonKeyData) || doc[kJsonKeyData].IsNull()) {
return SdkCode::kErrorParseJson;
}
const rapidjson::Value &clusterInfo = doc[kJsonKeyData];
if (!clusterInfo.HasMember(kJsonKeyNodeList) || clusterInfo[kJsonKeyNodeList].IsNull()) {
return SdkCode::kErrorParseJson;
}
const rapidjson::Value &nodeList = clusterInfo[kJsonKeyNodeList];
if (nodeList.GetArray().Size() <= 0) {
return SdkCode::kErrorParseJson;
}
if (!clusterInfo.HasMember(kJsonKeyClusterId) ||
!clusterInfo[kJsonKeyClusterId].IsInt() ||
clusterInfo[kJsonKeyClusterId].GetInt() <= 0) {
return SdkCode::kErrorParseJson;
}
group_id_2_cluster_id[inlong_group_id] = clusterInfo[kJsonKeyClusterId].GetInt();
int32_t load = 0;
if (clusterInfo.HasMember(kJsonKeyLoad) && clusterInfo[kJsonKeyLoad].IsInt() &&
!clusterInfo[kJsonKeyLoad].IsNull()) {
load = clusterInfo[kJsonKeyLoad].GetInt();
}
for (auto &proxy : nodeList.GetArray()) {
std::string ip;
std::string id;
int32_t port;
if (!proxy.HasMember(kJsonKeyIp) || proxy[kJsonKeyIp].IsNull()) {
continue;
}
ip = proxy[kJsonKeyIp].GetString();
if (!proxy.HasMember(kJsonKeyPort) || proxy[kJsonKeyPort].IsNull()) {
continue;
}
if (proxy[kJsonKeyPort].IsString()) port = std::stoi(proxy[kJsonKeyPort].GetString());
if (proxy[kJsonKeyPort].IsInt()) port = proxy[kJsonKeyPort].GetInt();
if (!proxy.HasMember(kJsonKeyId) || proxy[kJsonKeyId].IsNull()) {
continue;
}
if (proxy[kJsonKeyId].IsString()) id = proxy[kJsonKeyId].GetString();
if (proxy[kJsonKeyId].IsInt()) id = proxy[kJsonKeyId].GetInt();
proxy_info_vec.emplace_back(id, ip, port, load);
}
return SdkCode::kSuccess;
}