UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RapidJsonUtils.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "RapidJsonIncludes.h"
6#include "Misc/Optional.h"
10
14namespace UE::Json
15{
16namespace Private
17{
18 // TODO: Can remove this and just use rapidjson::CrtAllocator once RapidJsonIncludes.h starts overriding RAPIDJSON_MALLOC, etc
20 {
21 public:
22 static const bool kNeedFree = true;
23
24 void* Malloc(size_t Count)
25 {
26 return FMemory::Malloc(Count);
27 }
28
29 void* Realloc(void* Original, size_t, size_t Count)
30 {
31 if (Count == 0)
32 {
34 return nullptr;
35 }
36 return FMemory::Realloc(Original, Count);
37 }
38
39 static void Free(void* Ptr)
40 {
41 FMemory::Free(Ptr);
42 }
43
44 bool operator==(const FAllocatorImpl&) const
45 {
46 return true;
47 }
48
49 bool operator!=(const FAllocatorImpl&) const
50 {
51 return false;
52 }
53 };
54} // namespace UE::Json::Private
55
56 // types that use TCHAR (common)
57 using FEncoding = rapidjson::UTF16<TCHAR>;
59 using FDocument = rapidjson::GenericDocument<FEncoding, FAllocator>;
60 using FStringRef = FDocument::StringRefType;
61 using FValue = FDocument::ValueType;
62 using FMember = FValue::Member;
63
64 // types that use TCHAR (for reading)
65 using FConstObject = FValue::ConstObject;
66 using FConstArray = FValue::ConstArray;
67
68 // types that use TCHAR (for writing)
69 using FObject = FValue::Object;
70 using FArray = FValue::Array;
71 using FStringBuffer = rapidjson::GenericStringBuffer<FEncoding, FAllocator>;
72 using FStringWriter = rapidjson::Writer<FStringBuffer, FEncoding, FEncoding, FAllocator>;
73 using FPrettyStringWriter = rapidjson::PrettyWriter<FStringBuffer, FEncoding, FEncoding, FAllocator>;
74
80 {
81 return FStringRef(Str.GetData(), Str.Len());
82 }
83
88 {
89 return FValue(Str.GetData(), Str.Len(), Allocator);
90 }
91
97 JSON_API TOptional<bool> GetBoolField(FConstObject Object, const TCHAR* FieldName);
98
104 JSON_API TOptional<int32> GetInt32Field(FConstObject Object, const TCHAR* FieldName);
105
112
118 JSON_API TOptional<int64> GetInt64Field(FConstObject Object, const TCHAR* FieldName);
119
126
133
140
146 template<typename TEnum>
147 inline TOptional<TEnum> GetEnumField(FConstObject Object, const TCHAR* FieldName)
148 {
149 TEnum Value;
150 TOptional<FStringView> StringView = GetStringField(Object, FieldName);
151
152 if (StringView.IsSet() && LexTryParseString(Value, *StringView))
153 {
154 return Value;
155 }
156
157 return {};
158 }
159
166
173
177 JSON_API bool HasNullField(FConstObject Object, const TCHAR* FieldName);
178
183
185 {
186 rapidjson::ParseErrorCode ErrorCode = rapidjson::kParseErrorNone;
187 size_t Offset = 0;
188
192 JSON_API FString CreateMessage(const FStringView JsonText) const;
193 };
194
199
206
210 JSON_API FString WriteCompact(const FDocument& Document);
211
215 JSON_API FString WritePretty(const FDocument& Document);
216
221
222} // namespace UE::Json
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
bool LexTryParseString(EBuildConfiguration &OutConfiguration, const TCHAR *Configuration)
Definition GenericPlatformMisc.cpp:270
Definition ArrayView.h:139
constexpr int32 Len() const
Definition StringView.h:174
constexpr const CharType * GetData() const
Definition StringView.h:160
Definition ValueOrError.h:58
Definition RapidJsonUtils.h:20
bool operator==(const FAllocatorImpl &) const
Definition RapidJsonUtils.h:44
static void Free(void *Ptr)
Definition RapidJsonUtils.h:39
bool operator!=(const FAllocatorImpl &) const
Definition RapidJsonUtils.h:49
void * Malloc(size_t Count)
Definition RapidJsonUtils.h:24
static const bool kNeedFree
Definition RapidJsonUtils.h:22
void * Realloc(void *Original, size_t, size_t Count)
Definition RapidJsonUtils.h:29
Definition OverriddenPropertySet.cpp:45
Definition JsonValue.cpp:610
bool HasNullField(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:94
TValueOrError< FDocument, FParseError > ParseInPlace(TArrayView< TCHAR > JsonText)
Definition RapidJsonUtils.cpp:249
rapidjson::GenericDocument< FEncoding, FAllocator > FDocument
Definition RapidJsonUtils.h:59
FValue MakeStringValue(FStringView Str, FAllocator &Allocator)
Definition RapidJsonUtils.h:87
rapidjson::PrettyWriter< FStringBuffer, FEncoding, FEncoding, FAllocator > FPrettyStringWriter
Definition RapidJsonUtils.h:73
const TCHAR * GetValueTypeName(const FValue &Value)
Definition RapidJsonUtils.cpp:304
FString WritePretty(const FDocument &Document)
Definition RapidJsonUtils.cpp:293
TValueOrError< FDocument, FParseError > Parse(const FStringView JsonText)
Definition RapidJsonUtils.cpp:233
rapidjson::GenericStringBuffer< FEncoding, FAllocator > FStringBuffer
Definition RapidJsonUtils.h:71
TOptional< uint64 > GetUint64Field(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:54
FValue::Object FObject
Definition RapidJsonUtils.h:69
FDocument::StringRefType FStringRef
Definition RapidJsonUtils.h:60
FString WriteCompact(const FDocument &Document)
Definition RapidJsonUtils.cpp:283
TOptional< FConstObject > GetObjectField(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:100
TOptional< int32 > GetInt32Field(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:21
FStringRef MakeStringRef(FStringView Str)
Definition RapidJsonUtils.h:79
TOptional< int64 > GetInt64Field(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:43
rapidjson::UTF16< TCHAR > FEncoding
Definition RapidJsonUtils.h:57
TOptional< FConstArray > GetArrayField(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:121
TOptional< FConstObject > GetRootObject(const FDocument &Document)
Definition RapidJsonUtils.cpp:111
FDocument::ValueType FValue
Definition RapidJsonUtils.h:61
TOptional< double > GetDoubleField(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:66
FValue::ConstObject FConstObject
Definition RapidJsonUtils.h:65
FValue::Array FArray
Definition RapidJsonUtils.h:70
TOptional< TEnum > GetEnumField(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.h:147
rapidjson::Writer< FStringBuffer, FEncoding, FEncoding, FAllocator > FStringWriter
Definition RapidJsonUtils.h:72
FValue::ConstArray FConstArray
Definition RapidJsonUtils.h:66
TOptional< FStringView > GetStringField(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:77
TOptional< bool > GetBoolField(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:10
FValue::Member FMember
Definition RapidJsonUtils.h:62
TOptional< uint32 > GetUint32Field(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:32
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
Definition Optional.h:131
constexpr bool IsSet() const
Definition Optional.h:69
Definition RapidJsonUtils.h:185
JSON_API FString CreateMessage(const FStringView JsonText) const
Definition RapidJsonUtils.cpp:195
size_t Offset
Definition RapidJsonUtils.h:187
rapidjson::ParseErrorCode ErrorCode
Definition RapidJsonUtils.h:186