UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
JsonDomBuilder.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include <type_traits>
6
7#include "Dom/JsonValue.h"
8#include "Dom/JsonObject.h"
10
12
31{
32public:
33 class FArray;
34
35 class FObject
36 {
37 public:
39 : Object(MakeShared<FJsonObject>())
40 {
41 }
42
44 : Object(InObject.ToSharedRef())
45 {
46 }
47
49 : Object(InObject)
50 {
51 }
52
57
59 {
60 return Object;
61 }
62
63 template <template <class> class TPrintPolicy = TPrettyJsonPrintPolicy>
64 FString ToString() const
65 {
66 FString Result;
68 FJsonSerializer::Serialize(Object, JsonWriter);
69 return Result;
70 }
71
72 int Num() const
73 {
74 return Object->Values.Num();
75 }
76
77 FObject& Set(const FString& Key, const FArray& Arr) { Object->SetField(Key, Arr.AsJsonValue()); return *this; }
78 FObject& Set(const FString& Key, const FObject& Obj) { Object->SetField(Key, Obj.AsJsonValue()); return *this; }
79
80 FObject& Set(const FString& Key, const FString& Str) { Object->SetField(Key, MakeShared<FJsonValueString>(Str)); return *this; }
81
82 template <class NumberType
83 UE_REQUIRES(!std::is_same_v<NumberType, bool> && (std::is_integral_v<NumberType> || std::is_floating_point_v<NumberType>))>
84 FObject& Set(const FString& Key, NumberType Number) { Object->SetField(Key, MakeShared<FJsonValueNumber>(Number)); return *this; }
85
86 template <class BoolType
87 UE_REQUIRES(std::is_same_v<BoolType, bool>)>
88 FObject& Set(const FString& Key, BoolType Boolean) { Object->SetField(Key, MakeShared<FJsonValueBoolean>(Boolean)); return *this; }
89
90 FObject& Set(const FString& Key, TYPE_OF_NULLPTR) { Object->SetField(Key, MakeShared<FJsonValueNull>()); return *this; }
91
92 FObject& Set(const FString& Key, TSharedPtr<FJsonValue> Value) { Object->SetField(Key, Value ? Value : MakeShared<FJsonValueNull>()); return *this; }
93
94 void CopyIf(const FJsonObject& Src, TFunctionRef<bool (const FString&, const FJsonValue&)> Pred)
95 {
96 for (const TPair<FString, TSharedPtr<FJsonValue>>& KV: Src.Values)
97 {
98 if (ensure(KV.Value) && Pred(KV.Key, *KV.Value))
99 {
100 Object->SetField(KV.Key, KV.Value);
101 }
102 }
103 }
104
105 private:
107 };
108
109 class FArray
110 {
111 public:
116
117 template <template <class> class TPrintPolicy = TPrettyJsonPrintPolicy>
118 FString ToString() const
119 {
120 FString Result;
122 FJsonSerializer::Serialize(Array, JsonWriter);
123 return Result;
124 }
125
126 int Num() const
127 {
128 return Array.Num();
129 }
130
131 FArray& Add(const FArray& Arr) { Array.Emplace(Arr.AsJsonValue()); return *this; }
132 FArray& Add(const FObject& Obj) { Array.Emplace(Obj.AsJsonValue()); return *this; }
133
134 FArray& Add(const FString& Str) { Array.Emplace(MakeShared<FJsonValueString>(Str)); return *this; }
135
136 template <class FNumber>
139
142
144
146 template <class... ValueType
147 UE_REQUIRES(sizeof...(ValueType) > 1)>
148 FArray& Add(ValueType&&... Value)
149 {
150 // This should be implemented with a fold expression when our compilers support it
151 int Temp[] = {0, (Add(Forward<ValueType>(Value)), 0)...};
152 (void)Temp;
153 return *this;
154 }
155
157 {
158 for (const TSharedPtr<FJsonValue>& Value: Src)
159 {
160 if (ensure(Value) && Pred(*Value))
161 {
162 Array.Emplace(Value);
163 }
164 }
165 }
166 private:
168 };
169};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define ensure( InExpression)
Definition AssertionMacros.h:464
FPlatformTypes::TYPE_OF_NULLPTR TYPE_OF_NULLPTR
The type of the C++ nullptr keyword.
Definition Platform.h:1157
TSharedRef< InObjectType, InMode > MakeShared(InArgTypes &&... Args)
Definition SharedPointer.h:2009
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_REQUIRES(...)
Definition Requires.h:86
Definition JsonDomBuilder.h:110
FArray & Add(const FString &Str)
Definition JsonDomBuilder.h:134
TSharedRef< FJsonValueArray > AsJsonValue() const
Definition JsonDomBuilder.h:112
FString ToString() const
Definition JsonDomBuilder.h:118
FArray & Add(ValueType &&... Value)
Definition JsonDomBuilder.h:148
FArray & Add(TYPE_OF_NULLPTR)
Definition JsonDomBuilder.h:141
FArray & Add(bool Boolean)
Definition JsonDomBuilder.h:140
TEnableIf< TIsIntegral< FNumber >::Value||TIsFloatingPoint< FNumber >::Value, FArray & >::Type Add(FNumber Number)
Definition JsonDomBuilder.h:138
FArray & Add(const FArray &Arr)
Definition JsonDomBuilder.h:131
int Num() const
Definition JsonDomBuilder.h:126
FArray & Add(const FObject &Obj)
Definition JsonDomBuilder.h:132
FArray & Add(TSharedPtr< FJsonValue > Value)
Definition JsonDomBuilder.h:143
void CopyIf(const TArray< TSharedPtr< FJsonValue > > &Src, TFunctionRef< bool(const FJsonValue &)> Pred)
Definition JsonDomBuilder.h:156
Definition JsonDomBuilder.h:36
FObject & Set(const FString &Key, BoolType Boolean)
Definition JsonDomBuilder.h:88
FObject & Set(const FString &Key, TSharedPtr< FJsonValue > Value)
Definition JsonDomBuilder.h:92
FObject(TSharedPtr< FJsonObject > InObject)
Definition JsonDomBuilder.h:43
FObject & Set(const FString &Key, const FObject &Obj)
Definition JsonDomBuilder.h:78
FObject & Set(const FString &Key, const FArray &Arr)
Definition JsonDomBuilder.h:77
FObject(TSharedRef< FJsonObject > InObject)
Definition JsonDomBuilder.h:48
TSharedRef< FJsonObject > AsJsonObject() const
Definition JsonDomBuilder.h:58
TSharedRef< FJsonValueObject > AsJsonValue() const
Definition JsonDomBuilder.h:53
FObject & Set(const FString &Key, const FString &Str)
Definition JsonDomBuilder.h:80
FString ToString() const
Definition JsonDomBuilder.h:64
FObject & Set(const FString &Key, TYPE_OF_NULLPTR)
Definition JsonDomBuilder.h:90
FObject & Set(const FString &Key, NumberType Number)
Definition JsonDomBuilder.h:84
int Num() const
Definition JsonDomBuilder.h:72
void CopyIf(const FJsonObject &Src, TFunctionRef< bool(const FString &, const FJsonValue &)> Pred)
Definition JsonDomBuilder.h:94
FObject()
Definition JsonDomBuilder.h:38
Definition JsonDomBuilder.h:31
Definition JsonObject.h:23
TMap< FString, TSharedPtr< FJsonValue > > Values
Definition JsonObject.h:26
JSON_API void SetField(FString &&FieldName, const TSharedPtr< FJsonValue > &Value)
Definition JsonObject.cpp:5
Definition JsonValue.h:22
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_FORCEINLINE_HINT SizeType Emplace(ArgsType &&... Args)
Definition Array.h:2561
Definition EnableIf.h:20
Definition AssetRegistryState.h:50
static bool Serialize(const typename Policy::FValue &Value, const FString &Identifier, const TSharedRef< TJsonWriter< CharType, PrintPolicy > > &Writer, bool bCloseWriter=true)
Definition JsonSerializer.h:359
Definition JsonWriter.h:783
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition IsFloatingPoint.h:12
Definition PrettyJsonPrintPolicy.h:16
Definition Tuple.h:652