UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
JsonWriter.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "CoreMinimal.h"
10
17template <typename DstChar, typename SrcChar>
19{
20 return Char >= CHARTEXT(SrcChar, ' ') && (std::is_same_v<DstChar, SrcChar> || !std::is_same_v<DstChar, ANSICHAR> || Char <= (SrcChar)0x7E);
21}
22
32template<typename StringType>
33inline StringType& AppendEscapeJsonString(StringType& AppendTo, const FString& StringVal)
34{
35 using CharType = typename StringType::ElementType;
36 AppendTo += TEXT("\"");
37 for (const CharType* Char = *StringVal; *Char != CHARTEXT(CharType, '\0'); ++Char)
38 {
39 switch (*Char)
40 {
41 case CHARTEXT(CharType, '\\'): AppendTo += CHARTEXT(CharType, "\\\\"); break;
42 case CHARTEXT(CharType, '\n'): AppendTo += CHARTEXT(CharType, "\\n"); break;
43 case CHARTEXT(CharType, '\t'): AppendTo += CHARTEXT(CharType, "\\t"); break;
44 case CHARTEXT(CharType, '\b'): AppendTo += CHARTEXT(CharType, "\\b"); break;
45 case CHARTEXT(CharType, '\f'): AppendTo += CHARTEXT(CharType, "\\f"); break;
46 case CHARTEXT(CharType, '\r'): AppendTo += CHARTEXT(CharType, "\\r"); break;
47 case CHARTEXT(CharType, '\"'): AppendTo += CHARTEXT(CharType, "\\\""); break;
48 default:
49 // Must escape control characters or non representable characters
51 {
52 AppendTo += *Char;
53 }
54 else
55 {
56 AppendTo.Appendf(CHARTEXT(CharType, "\\u%04x"), *Char);
57 }
58 }
59 }
60 AppendTo += CHARTEXT(CharType, "\"");
61
62 return AppendTo;
63}
64
71inline FString EscapeJsonString(const FString& StringVal)
72{
73 FString Result;
74 return AppendEscapeJsonString(Result, StringVal);
75}
76
83template <class CharType = TCHAR, class PrintPolicy = TPrettyJsonPrintPolicy<CharType> >
85{
86public:
87
88 static TSharedRef< TJsonWriter > Create( FArchive* const Stream, int32 InitialIndentLevel = 0 )
89 {
90 return MakeShareable( new TJsonWriter< CharType, PrintPolicy >( Stream, InitialIndentLevel ) );
91 }
92
93public:
94
95 virtual ~TJsonWriter() { }
96
97 inline int32 GetIndentLevel() const { return IndentLevel; }
98
100 {
102 }
103
105 {
106 return Stack.Num() > 0 ? Stack.Top() : EJson::None;
107 }
108
110 {
113
115 {
116 PrintPolicy::WriteLineTerminator(Stream);
117 PrintPolicy::WriteTabs(Stream, IndentLevel);
118 }
119
120 PrintPolicy::WriteChar(Stream, CharType('{'));
121 ++IndentLevel;
124 }
125
126 template<typename IdentifierType>
128 {
131
132 PrintPolicy::WriteLineTerminator(Stream);
133 PrintPolicy::WriteTabs(Stream, IndentLevel);
134 PrintPolicy::WriteChar(Stream, CharType('{'));
135 ++IndentLevel;
138 }
139
141 {
143
144 PrintPolicy::WriteLineTerminator(Stream);
145
146 --IndentLevel;
147 PrintPolicy::WriteTabs(Stream, IndentLevel);
148 PrintPolicy::WriteChar(Stream, CharType('}'));
149 Stack.Pop();
151 }
152
154 {
157
159 {
160 PrintPolicy::WriteLineTerminator(Stream);
161 PrintPolicy::WriteTabs(Stream, IndentLevel);
162 }
163
164 PrintPolicy::WriteChar(Stream, CharType('['));
165 ++IndentLevel;
168 }
169
170 template<typename IdentifierType>
172 {
175
176 PrintPolicy::WriteSpace( Stream );
177 PrintPolicy::WriteChar(Stream, CharType('['));
178 ++IndentLevel;
181 }
182
184 {
185 check( Stack.Top() == EJson::Array );
186
187 --IndentLevel;
188
190 {
191 PrintPolicy::WriteLineTerminator(Stream);
192 PrintPolicy::WriteTabs(Stream, IndentLevel);
193 }
194
195 PrintPolicy::WriteChar(Stream, CharType(']'));
196 Stack.Pop();
198 }
199
200 // Special case for bit fields
202 {
205
207 {
208 PrintPolicy::WriteSpace(Stream);
209 }
210 else
211 {
212 PrintPolicy::WriteLineTerminator(Stream);
213 PrintPolicy::WriteTabs(Stream, IndentLevel);
214 }
215
217 }
218
219 template <class FValue>
220 void WriteValue(FValue&& Value)
221 {
224
226 {
227 PrintPolicy::WriteSpace(Stream);
228 }
229 else
230 {
231 PrintPolicy::WriteLineTerminator(Stream);
232 PrintPolicy::WriteTabs(Stream, IndentLevel);
233 }
234
236 }
237
239 {
242
243 PrintPolicy::WriteLineTerminator(Stream);
244 PrintPolicy::WriteTabs(Stream, IndentLevel);
246 }
247
248 void WriteValue(const FString& Value)
249 {
252
253 PrintPolicy::WriteLineTerminator(Stream);
254 PrintPolicy::WriteTabs(Stream, IndentLevel);
256 }
257
258 // Special case for bit fields
259 template<typename IdentifierType>
268
269 template<class FValue, typename IdentifierType>
278
279 template<class ElementType, typename IdentifierType>
281 {
283 for (int Idx = 0; Idx < Array.Num(); Idx++)
284 {
285 WriteValue(Array[Idx]);
286 }
288 }
289
290 template<typename IdentifierType, typename MapIdentifierType, class MapElementType>
300
301 template<typename MapIdentifierType, class MapElementType>
303 {
305 for (const TPair<MapIdentifierType, MapElementType>& Element : Map)
306 {
307 WriteValue(Element.Key, Element.Value);
308 }
310 }
311
316
317 // WARNING: THIS IS DANGEROUS. Use this only if you know for a fact that the Value is valid JSON!
318 // Use this to insert the results of a different JSON Writer in.
323
324 // WARNING: THIS IS DANGEROUS. Use this only if you know for a fact that the Value is valid JSON!
325 // Use this to insert the results of a different JSON Writer in.
330
331 template<typename IdentifierType>
336
337 void WriteValue(const TCHAR* Value)
338 {
340 }
341
342 // WARNING: THIS IS DANGEROUS. Use this only if you know for a fact that the Value is valid JSON!
343 // Use this to insert the results of a different JSON Writer in.
348
349 // WARNING: THIS IS DANGEROUS. Use this only if you know for a fact that the Value is valid JSON!
350 // Use this to insert the results of a different JSON Writer in.
355
357 {
358 WriteValue(nullptr);
359 }
360
368
372 template<typename IdentifierType>
380
381protected:
382
389 TJsonWriter( FArchive* const InStream, int32 InitialIndentLevel )
390 : Stream( InStream )
391 , Stack()
393 , IndentLevel(InitialIndentLevel)
394 { }
395
396protected:
397
399 {
401 }
402
407
417
418 template <typename InCharType>
420 {
422 PrintPolicy::WriteLineTerminator(Stream);
423
424 PrintPolicy::WriteTabs(Stream, IndentLevel);
426 PrintPolicy::WriteChar(Stream, CharType(':'));
427
429 }
430
431 template <typename InCharType>
433 {
435 PrintPolicy::WriteLineTerminator(Stream);
436
437 PrintPolicy::WriteTabs(Stream, IndentLevel);
439 PrintPolicy::WriteChar(Stream, CharType(':'));
440
442 }
443
445 {
446 WriteIdentifier(Identifier.ToString()); // Does not copy
447 }
448
449 inline void WriteIdentifier(const FString& Identifier)
450 {
452 PrintPolicy::WriteLineTerminator(Stream);
453
454 PrintPolicy::WriteTabs(Stream, IndentLevel);
456 PrintPolicy::WriteChar(Stream, CharType(':'));
457
459 }
460
462 {
463 PrintPolicy::WriteString(Stream, Value ? TEXTVIEW("true") : TEXTVIEW("false"));
465 }
466
468 {
469 PrintPolicy::WriteFloat(Stream, Value);
470 return EJsonToken::Number;
471 }
472
474 {
475 // Specify 17 significant digits, the most that can ever be useful from a double
476 // In particular, this ensures large integers are written correctly
477 PrintPolicy::WriteDouble(Stream, Value);
478 return EJsonToken::Number;
479 }
480
482 {
483 return WriteValueOnly((int64)Value);
484 }
485
487 {
488 PrintPolicy::WriteString(Stream, WriteToString<32>(Value));
489 return EJsonToken::Number;
490 }
491
492 // Special case for bit fields
494 {
495 return WriteValueOnly((uint64)Value);
496 }
497
502
504 {
505 PrintPolicy::WriteString(Stream, WriteToString<32>(Value));
506 return EJsonToken::Number;
507 }
508
510 {
511 PrintPolicy::WriteString(Stream, TEXTVIEW("null"));
512 return EJsonToken::Null;
513 }
514
520
526
532
533 template<typename ValueType>
535 {
536 return WriteValueOnly(*ValueRef);
537 }
538
539 template<typename ValueType>
541 {
542 if(ValuePtr.IsValid())
543 {
544 return WriteValueOnly(*ValuePtr);
545 }
546 else
547 {
548 return WriteValueOnly(nullptr);
549 }
550 }
551
552 template<typename... ValueTypes>
554 {
555 return Visit([this](const auto& Value)
556 {
557 return WriteValueOnly(Value);
558 }, Variant);
559 }
560
561 template<typename MapIdentifierType, typename MapElementType>
563 {
565 for (const TPair<MapIdentifierType, MapElementType>& Element : Map)
566 {
567 WriteValue(Element.Key, Element.Value);
568 }
570
572 }
573
574 template<typename ArrayElementType>
576 {
578 for (int Idx = 0; Idx < Array.Num(); Idx++)
579 {
580 WriteValue(Array[Idx]);
581 }
583
585 }
586
588 {
589 PrintPolicy::WriteChar(Stream, CharType('"'));
591 PrintPolicy::WriteChar(Stream, CharType('"'));
592 }
593
595 {
596 PrintPolicy::WriteChar(Stream, CharType('"'));
598 PrintPolicy::WriteChar(Stream, CharType('"'));
599 }
600
601 virtual void WriteStringValue(const FString& String)
602 {
604 }
605
607 {
608 PrintPolicy::WriteChar(Stream, CharType('"'));
610 PrintPolicy::WriteChar(Stream, CharType('"'));
611 }
612
617
618 // WARNING: THIS IS DANGEROUS. Use this only if you know for a fact that the Value is valid JSON!
619 // Use this to insert the results of a different JSON Writer in.
620 template <typename InCharType>
622 {
625
626 PrintPolicy::WriteSpace(Stream);
627 PrintPolicy::WriteString(Stream, Value);
629 }
630
631 template <typename InCharType>
633 {
636
638 {
639 PrintPolicy::WriteLineTerminator(Stream);
640 PrintPolicy::WriteTabs(Stream, IndentLevel);
641 }
642 else
643 {
644 PrintPolicy::WriteSpace(Stream);
645 }
646
647 PrintPolicy::WriteString(Stream, Value);
649 }
650
651 template<typename InCharType>
653 {
654 auto NeedsEscaping = [](InCharType Char) -> bool
655 {
656 switch (Char)
657 {
658 case CHARTEXT(InCharType, '\\'): return true;
659 case CHARTEXT(InCharType, '\n'): return true;
660 case CHARTEXT(InCharType, '\t'): return true;
661 case CHARTEXT(InCharType, '\b'): return true;
662 case CHARTEXT(InCharType, '\f'): return true;
663 case CHARTEXT(InCharType, '\r'): return true;
664 case CHARTEXT(InCharType, '\"'): return true;
665 default:
666 // Must escape control characters or non representable characters
668 {
669 return false;
670 }
671 else
672 {
673 return true;
674 }
675 }
676 };
677
678 // Write successive runs of unescaped and escaped characters until the view is exhausted
679 while (!InView.IsEmpty())
680 {
681 // In case we are handed a very large string, avoid checking all of it at once without writing anything
682 constexpr int32 LongestRun = 2048;
683 int32 EndIndex = 0;
684 for (; EndIndex < InView.Len() && EndIndex < LongestRun; ++EndIndex)
685 {
686 if (NeedsEscaping(InView[EndIndex]))
687 {
688 break;
689 }
690 }
691 if (TStringView<InCharType> Blittable = InView.Left(EndIndex); !Blittable.IsEmpty())
692 {
693 PrintPolicy::WriteString(Stream, Blittable);
694 }
695 InView.RightChopInline(EndIndex);
696 for (EndIndex = 0; EndIndex < InView.Len(); ++EndIndex)
697 {
698 InCharType Char = InView[EndIndex];
699 switch (Char)
700 {
701 case CHARTEXT(InCharType, '\\'): PrintPolicy::WriteString(Stream, TEXTVIEW("\\\\")); continue;
702 case CHARTEXT(InCharType, '\n'): PrintPolicy::WriteString(Stream, TEXTVIEW("\\n")); continue;
703 case CHARTEXT(InCharType, '\t'): PrintPolicy::WriteString(Stream, TEXTVIEW("\\t")); continue;
704 case CHARTEXT(InCharType, '\b'): PrintPolicy::WriteString(Stream, TEXTVIEW("\\b")); continue;
705 case CHARTEXT(InCharType, '\f'): PrintPolicy::WriteString(Stream, TEXTVIEW("\\f")); continue;
706 case CHARTEXT(InCharType, '\r'): PrintPolicy::WriteString(Stream, TEXTVIEW("\\r")); continue;
707 case CHARTEXT(InCharType, '\"'): PrintPolicy::WriteString(Stream, TEXTVIEW("\\\"")); continue;
708 default: break;
709 }
710
711 // Must escape control characters or non representable characters
713 {
714 break;
715 }
716 else
717 {
718 TAnsiStringBuilder<8> Builder;
719 Builder.Appendf("\\u%04x", Char);
720 PrintPolicy::WriteString(Stream, Builder.ToView());
721 }
722 }
723 InView.RightChopInline(EndIndex);
724 }
725 }
726
731};
732
733
734template <class PrintPolicy = TPrettyJsonPrintPolicy<TCHAR>>
736 : public TJsonWriter<typename PrintPolicy::CharType, PrintPolicy>
737{
738public:
739 using CharType = typename PrintPolicy::CharType;
741
746
747public:
748
750 {
751 check(this->Stream->Close());
752 delete this->Stream;
753 }
754
755 virtual bool Close() override
756 {
757 OutString->Reset(Bytes.Num()/sizeof(CharType));
758 for (int32 i = 0; i < Bytes.Num(); i+=sizeof(CharType))
759 {
760 CharType* Char = static_cast<CharType*>(static_cast<void*>(&Bytes[i]));
761 *OutString += *Char;
762 }
763
765 }
766
767protected:
768
770 : TJsonWriter<CharType, PrintPolicy>(new FMemoryWriter(Bytes), InitialIndent)
771 , Bytes()
772 , OutString(InOutString)
773 { }
774
775private:
776
777 TArray<uint8> Bytes;
778 StringType* OutString;
779};
780
781template <class CharType = TCHAR, class PrintPolicy = TPrettyJsonPrintPolicy<CharType>>
#define check(expr)
Definition AssertionMacros.h:314
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TYPE_OF_NULLPTR TYPE_OF_NULLPTR
The type of the C++ nullptr keyword.
Definition Platform.h:1157
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
#define CHARTEXT(CharType, x)
Definition Platform.h:1291
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
SharedPointerInternals::TRawPtrProxy< ObjectType > MakeShareable(ObjectType *InObject)
Definition SharedPointer.h:1947
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EJsonToken
Definition JsonTypes.h:35
EJson
Definition JsonTypes.h:23
bool EJsonToken_IsShortValue(EJsonToken Token)
Definition JsonTypes.h:54
bool HasDestinationJsonStringCharRepresentation(SrcChar Char)
Definition JsonWriter.h:18
FString EscapeJsonString(const FString &StringVal)
Definition JsonWriter.h:71
StringType & AppendEscapeJsonString(StringType &AppendTo, const FString &StringVal)
Definition JsonWriter.h:33
@ Char
Character type.
TStringView< UTF8CHAR > FUtf8StringView
Definition StringFwd.h:48
TStringView< TCHAR > FStringView
Definition StringFwd.h:45
#define TEXTVIEW(str)
Definition StringView.h:553
decltype(auto) Visit(Func &&Callable, Variants &&... Args)
Definition TVariant.h:271
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
virtual bool Close()
Definition Archive.h:1847
Definition MemoryWriter.h:101
Definition Text.h:385
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT void Push(ElementType &&Item)
Definition Array.h:1224
ElementType Pop(EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:1196
UE_NODEBUG UE_FORCEINLINE_HINT ElementType & Top() UE_LIFETIMEBOUND
Definition Array.h:1248
Definition JsonWriter.h:737
virtual bool Close() override
Definition JsonWriter.h:755
static TSharedRef< TJsonStringWriter > Create(StringType *const InStream, int32 InitialIndent=0)
Definition JsonWriter.h:742
TString< CharType > StringType
Definition JsonWriter.h:740
typename PrintPolicy::CharType CharType
Definition JsonWriter.h:739
TJsonStringWriter(StringType *const InOutString, int32 InitialIndent)
Definition JsonWriter.h:769
virtual ~TJsonStringWriter()
Definition JsonWriter.h:749
Definition JsonWriter.h:783
static TSharedRef< TJsonWriter< CharType, PrintPolicy > > Create(StringType *const Stream, int32 InitialIndent=0)
Definition JsonWriter.h:792
static TSharedRef< TJsonWriter< CharType, PrintPolicy > > Create(FArchive *const Stream, int32 InitialIndent=0)
Definition JsonWriter.h:787
TString< CharType > StringType
Definition JsonWriter.h:785
Definition JsonWriter.h:85
void WriteRawJSONValueImpl(TStringView< InCharType > Value)
Definition JsonWriter.h:632
EJsonToken WriteValueOnly(double Value)
Definition JsonWriter.h:473
void WriteRawJSONValue(FUtf8StringView Value)
Definition JsonWriter.h:351
EJsonToken WriteValueOnly(int32 Value)
Definition JsonWriter.h:481
void WriteObjectStart(IdentifierType &&Identifier)
Definition JsonWriter.h:127
void WriteValue(const TCHAR *Value)
Definition JsonWriter.h:337
void WriteIdentifier(TStringView< InCharType > Identifier)
Definition JsonWriter.h:432
void WriteRawJSONValueImpl(FStringView Identifier, TStringView< InCharType > Value)
Definition JsonWriter.h:621
virtual void WriteStringValue(const FString &String)
Definition JsonWriter.h:601
EJsonToken WriteValueOnly(bool Value)
Definition JsonWriter.h:461
int32 GetIndentLevel() const
Definition JsonWriter.h:97
EJsonToken WriteValueOnly(FStringView Value)
Definition JsonWriter.h:521
EJsonToken WriteValueOnly(float Value)
Definition JsonWriter.h:467
void WriteValue(IdentifierType &&Identifier, const TMap< MapIdentifierType, MapElementType > &Map)
Definition JsonWriter.h:291
void WriteNull()
Definition JsonWriter.h:356
EJsonToken WriteValueOnly(int64 Value)
Definition JsonWriter.h:486
void WriteValue(uint8 Value)
Definition JsonWriter.h:201
virtual void WriteStringValue(FUtf8StringView String)
Definition JsonWriter.h:606
int32 IndentLevel
Definition JsonWriter.h:730
void WriteIdentifier(const InCharType *Identifier)
Definition JsonWriter.h:419
void WriteValue(IdentifierType &&Identifier, uint8 Value)
Definition JsonWriter.h:260
virtual void WriteStringValue(const FUtf8String &String)
Definition JsonWriter.h:613
void WriteObjectStart()
Definition JsonWriter.h:109
EJsonToken WriteValueOnly(uint64 Value)
Definition JsonWriter.h:503
EJsonToken WriteValueOnly(TSharedPtr< ValueType > ValuePtr)
Definition JsonWriter.h:540
bool CanWriteObjectStart() const
Definition JsonWriter.h:99
EJson GetCurrentElementType() const
Definition JsonWriter.h:104
void WriteIdentifier(const FString &Identifier)
Definition JsonWriter.h:449
EJsonToken WriteValueOnly(const TMap< MapIdentifierType, MapElementType > &Map)
Definition JsonWriter.h:562
void WriteValue(FStringView Identifier, const TCHAR *Value)
Definition JsonWriter.h:312
static TSharedRef< TJsonWriter > Create(FArchive *const Stream, int32 InitialIndentLevel=0)
Definition JsonWriter.h:88
void WriteObjectEnd()
Definition JsonWriter.h:140
virtual bool Close()
Definition JsonWriter.h:361
void WriteValue(FStringView Value)
Definition JsonWriter.h:238
EJsonToken PreviousTokenWritten
Definition JsonWriter.h:729
EJsonToken WriteValueOnly(FUtf8StringView Value)
Definition JsonWriter.h:527
void WriteRawJSONValue(FStringView Identifier, FStringView Value)
Definition JsonWriter.h:319
void WriteNull(IdentifierType &&Identifier)
Definition JsonWriter.h:332
void WriteArrayStart()
Definition JsonWriter.h:153
EJsonToken WriteValueOnly(const TCHAR *Value)
Definition JsonWriter.h:515
void WriteArrayStart(IdentifierType &&Identifier)
Definition JsonWriter.h:171
void WriteIdentifier(const FText &Identifier)
Definition JsonWriter.h:444
virtual void WriteStringValue(FAnsiStringView String)
Definition JsonWriter.h:587
void WriteValue(FValue &&Value)
Definition JsonWriter.h:220
EJsonToken WriteValueOnly(TSharedRef< ValueType > ValueRef)
Definition JsonWriter.h:534
void WriteValue(const TMap< MapIdentifierType, MapElementType > &Map)
Definition JsonWriter.h:302
virtual ~TJsonWriter()
Definition JsonWriter.h:95
void WriteArrayEnd()
Definition JsonWriter.h:183
TJsonWriter(FArchive *const InStream, int32 InitialIndentLevel)
Definition JsonWriter.h:389
void WriteIdentifierPrefix(IdentifierType &&Identifier)
Definition JsonWriter.h:373
void WriteValue(IdentifierType &&Identifier, FValue &&Value)
Definition JsonWriter.h:270
bool CanWriteObjectWithoutIdentifier() const
Definition JsonWriter.h:403
void WriteEscapedString(TStringView< InCharType > InView)
Definition JsonWriter.h:652
EJsonToken WriteValueOnly(TYPE_OF_NULLPTR)
Definition JsonWriter.h:509
void WriteValue(IdentifierType &&Identifier, const TArray< ElementType > &Array)
Definition JsonWriter.h:280
bool CanWriteValueWithoutIdentifier() const
Definition JsonWriter.h:398
void WriteRawJSONValue(FStringView Value)
Definition JsonWriter.h:344
EJsonToken WriteValueOnly(const TVariant< ValueTypes... > &Variant)
Definition JsonWriter.h:553
FArchive *const Stream
Definition JsonWriter.h:727
virtual void WriteStringValue(FStringView String)
Definition JsonWriter.h:594
EJsonToken WriteValueOnly(const TArray< ArrayElementType > &Array)
Definition JsonWriter.h:575
void WriteCommaIfNeeded()
Definition JsonWriter.h:408
TArray< EJson > Stack
Definition JsonWriter.h:728
void WriteValue(const FString &Value)
Definition JsonWriter.h:248
void WriteRawJSONValue(FUtf8StringView Identifier, FUtf8StringView Value)
Definition JsonWriter.h:326
EJsonToken WriteValueOnly(uint32 Value)
Definition JsonWriter.h:498
EJsonToken WriteValueOnly(uint8 Value)
Definition JsonWriter.h:493
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
UE_FORCEINLINE_HINT const bool IsValid() const
Definition SharedPointer.h:1085
Definition SharedPointer.h:153
BuilderType & Appendf(const FmtType &Fmt, Types... Args)
Definition StringBuilder.h:419
ViewType ToView() const UE_LIFETIMEBOUND
Definition StringBuilder.h:165
Definition StringBuilder.h:509
ViewType Left(int32 CharCount) const
Definition StringView.h:580
Definition TVariant.h:48
Definition Tuple.h:652