TMap<FString, FString> URequestManagerBase::DeSerializeJsonContent(const FString& JsonContent)
{
TMap<FString, FString> ReturnMap;
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(JsonContent);
if (FJsonSerializer::Deserialize(Reader, JsonObject) && JsonObject.IsValid())
{
for (const TPair<FString, TSharedPtr<FJsonValue>>& Pair : JsonObject->Values)
{
CheckJsonType(Pair, &ReturnMap);
}
}
return ReturnMap;
}
void URequestManagerBase::CheckJsonType(TPair<FString, TSharedPtr<FJsonValue>> Json, TMap<FString, FString>* Map)
{
if (Json.Value->Type == EJson::Object || Json.Value->Type == EJson::Array)
{
if (Json.Value->Type == EJson::Object)
{
for (const TPair<FString, TSharedPtr<FJsonValue>>& Pair : Json.Value->AsObject()->Values)
{
CheckJsonType(Pair, Map);
}
}
else if (Json.Value->Type == EJson::Array)
{
int32 Index = 1;
for (const auto& ArrayValue : Json.Value->AsArray())
{
Map->Add(Json.Key + "_" + FString::FromInt(Index), ArrayValue->AsString());
Index++;
}
}
}
else
{
Map->Add(Json.Key, Json.Value->AsString());
}
}