Fix associative container on json values (#20606)

This commit is contained in:
roseatromero 2025-04-26 17:17:52 +01:00 committed by GitHub
parent 1850c07951
commit de310f6ee1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 62 additions and 0 deletions

View File

@ -298,6 +298,17 @@ inline void WriteJsonValue(JsonWriter& Writer, const TMap<FString, T>& Value)
Writer->WriteObjectEnd(); Writer->WriteObjectEnd();
} }
template <typename T>
inline void WriteJsonValue(JsonWriter& Writer, const TSet<T>& Value)
{
Writer->WriteArrayStart();
for (const auto& Element : Value)
{
WriteJsonValue(Writer, Element);
}
Writer->WriteArrayEnd();
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, FString& Value) inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, FString& Value)
@ -465,6 +476,26 @@ inline bool TryGetJsonValue(const TSharedPtr<FJsonObject>& JsonObject, const FSt
return true; return true;
} }
template <typename T>
inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, TSet<T>& ArrayValue)
{
const TArray<TSharedPtr<FJsonValue>>* JsonArray;
if (JsonValue->TryGetArray(JsonArray))
{
bool ParseSuccess = true;
const int32 Count = JsonArray->Num();
ArrayValue.Reset();
for (int i = 0; i < Count; i++)
{
T TmpValue;
ParseSuccess &= TryGetJsonValue((*JsonArray)[i], TmpValue);
ArrayValue.Emplace(MoveTemp(TmpValue));
}
return ParseSuccess;
}
return false;
}
{{#cppNamespaceDeclarations}} {{#cppNamespaceDeclarations}}
} }
{{/cppNamespaceDeclarations}} {{/cppNamespaceDeclarations}}

View File

@ -307,6 +307,17 @@ inline void WriteJsonValue(JsonWriter& Writer, const TMap<FString, T>& Value)
Writer->WriteObjectEnd(); Writer->WriteObjectEnd();
} }
template <typename T>
inline void WriteJsonValue(JsonWriter& Writer, const TSet<T>& Value)
{
Writer->WriteArrayStart();
for (const auto& Element : Value)
{
WriteJsonValue(Writer, Element);
}
Writer->WriteArrayEnd();
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, FString& Value) inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, FString& Value)
@ -474,4 +485,24 @@ inline bool TryGetJsonValue(const TSharedPtr<FJsonObject>& JsonObject, const FSt
return true; return true;
} }
template <typename T>
inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, TSet<T>& ArrayValue)
{
const TArray<TSharedPtr<FJsonValue>>* JsonArray;
if (JsonValue->TryGetArray(JsonArray))
{
bool ParseSuccess = true;
const int32 Count = JsonArray->Num();
ArrayValue.Reset();
for (int i = 0; i < Count; i++)
{
T TmpValue;
ParseSuccess &= TryGetJsonValue((*JsonArray)[i], TmpValue);
ArrayValue.Emplace(MoveTemp(TmpValue));
}
return ParseSuccess;
}
return false;
}
} }