14#define JSON_NOTATIONMAP_DEF \
15static EJsonNotation TokenToNotationTable[] = \
17 EJsonNotation::Error, \
18 EJsonNotation::Error, \
19 EJsonNotation::ObjectStart, \
20 EJsonNotation::ObjectEnd, \
21 EJsonNotation::ArrayStart, \
22 EJsonNotation::ArrayEnd, \
23 EJsonNotation::Error, \
24 EJsonNotation::String, \
25 EJsonNotation::Number, \
26 EJsonNotation::Boolean, \
27 EJsonNotation::Boolean, \
28 EJsonNotation::Null, \
31#ifndef WITH_JSON_INLINED_NOTATIONMAP
32#define WITH_JSON_INLINED_NOTATIONMAP 0
35#if !WITH_JSON_INLINED_NOTATIONMAP
39template <
class CharType = TCHAR>
68 SetErrorMessage(
TEXT(
"Null Stream"));
77 SetErrorMessage(
TEXT(
"Improperly formatted."));
84 SetErrorMessage(
TEXT(
"Unexpected additional input found."));
105 switch (CurrentState)
127#if WITH_JSON_INLINED_NOTATIONMAP
140 SetErrorMessage(
TEXT(
"Unknown Error Occurred"));
169 if constexpr (std::is_same_v<StoredStringType, FString>)
263 void SetErrorMessage(
const FString& Message )
309 if (!ParseWhiteSpace())
316 if (NextToken(Token) ==
false)
323 SetErrorMessage(
TEXT(
"Open Curly or Square Brace token expected, but not found."));
335 if (NextToken(Token) ==
false)
350 SetErrorMessage(
TEXT(
"Comma token expected, but not found.") );
356 if (!NextToken(Token))
364 SetErrorMessage(
TEXT(
"String token expected, but not found.") );
372 if (!NextToken(Token))
379 SetErrorMessage(
TEXT(
"Colon token expected, but not found.") );
385 if (!NextToken(Token))
400 if (!NextToken(Token))
415 SetErrorMessage(
TEXT(
"Comma token expected, but not found.") );
421 if (!NextToken(Token))
442 if (
Char == CharType(
'\0'))
447 if (IsLineBreak(
Char))
453 if (!IsWhitespace(
Char))
455 if (IsJsonNumber(
Char))
486 SetErrorMessage(
TEXT(
"Unknown state reached while parsing Json token."));
505 SetErrorMessage(
TEXT(
"Unknown state reached while parsing Json token."));
520 if (!ParseStringToken())
529 case CharType(
't'):
case CharType(
'T'):
530 case CharType(
'f'):
case CharType(
'F'):
531 case CharType(
'n'):
case CharType(
'N'):
544 if (IsAlphaNumber(
Char)
580 NumberValue = std::numeric_limits<double>::quiet_NaN();
588 NumberValue = -std::numeric_limits<double>::quiet_NaN();
593 SetErrorMessage(
TEXT(
"Invalid Json Token. Check that your member names have quotes around them!") );
598 SetErrorMessage(
TEXT(
"Invalid Json Token.") );
604 SetErrorMessage(
TEXT(
"Invalid Json Token.") );
608 bool ParseStringToken()
628 SetErrorMessage(
TEXT(
"String Token Abruptly Ended.") );
639 if (
Char == CharType(
'\"'))
645 if (
Char == CharType(
'\\'))
653 if (
Char != CharType(
'u'))
660 case CharType(
'\"'):
case CharType(
'\\'):
case CharType(
'/'): StringBuffer.AppendChar(
Char);
break;
661 case CharType(
'f'): StringBuffer.AppendChar(CharType(
'\f'));
break;
662 case CharType(
'r'): StringBuffer.AppendChar(CharType(
'\r'));
break;
663 case CharType(
'n'): StringBuffer.AppendChar(CharType(
'\n'));
break;
664 case CharType(
'b'): StringBuffer.AppendChar(CharType(
'\b'));
break;
665 case CharType(
't'): StringBuffer.AppendChar(CharType(
'\t'));
break;
675 SetErrorMessage(
TEXT(
"String Token Abruptly Ended.") );
687 if ((HexDigit == 0) && (
Char != CharType(
'0')))
689 SetErrorMessage(
TEXT(
"Invalid Hexadecimal digit parsed.") );
702 SetErrorMessage(
TEXT(
"Bad Json escaped char.") );
721 bool ParseNumberToken( CharType
FirstChar )
732 SetErrorMessage(
TEXT(
"Number Token Abruptly Ended.") );
754 if (IsJsonNumber(
Char))
762 if (
Char == CharType(
'-')) {
State = 1; }
763 else if (
Char == CharType(
'0')) {
State = 2; }
764 else if (IsNonZeroDigit(
Char)) {
State = 3; }
769 if (
Char == CharType(
'0')) {
State = 2; }
770 else if (IsNonZeroDigit(
Char)) {
State = 3; }
775 if (
Char == CharType(
'.')) {
State = 4; }
776 else if (
Char == CharType(
'e') ||
Char == CharType(
'E')) {
State = 5; }
782 else if (
Char == CharType(
'.')) {
State = 4; }
783 else if (
Char == CharType(
'e') ||
Char == CharType(
'E')) {
State = 5; }
793 if (
Char == CharType(
'-') ||
Char == CharType(
'+')) {
State = 7; }
800 else if (
Char == CharType(
'e') ||
Char == CharType(
'E')) {
State = 5; }
815 SetErrorMessage(
TEXT(
"Unknown state reached in Json Number Token.") );
837 if (!
StateError && ((State == 2) || (State == 3) || (State == 6) || (State == 8)))
846 SetErrorMessage(
TEXT(
"Poorly formed Json Number Token.") );
852 bool ParseWhiteSpace()
863 if (IsLineBreak(
Char))
869 if (!IsWhitespace(
Char))
880 bool IsLineBreak(
const CharType&
Char )
882 return Char == CharType(
'\n');
886 bool IsWhitespace(
const CharType&
Char )
888 return Char == CharType(
' ') ||
Char == CharType(
'\t') ||
Char == CharType(
'\n') ||
Char == CharType(
'\r');
892 bool IsJsonNumber(
const CharType&
Char )
894 return ((
Char >= CharType(
'0') &&
Char <= CharType(
'9')) ||
895 Char == CharType(
'-') ||
Char == CharType(
'.') ||
Char == CharType(
'+') ||
Char == CharType(
'e') ||
Char == CharType(
'E'));
899 bool IsDigit(
const CharType&
Char )
901 return (
Char >= CharType(
'0') &&
Char <= CharType(
'9'));
904 bool IsNonZeroDigit(
const CharType&
Char )
906 return (
Char >= CharType(
'1') &&
Char <= CharType(
'9'));
910 bool IsAlphaNumber(
const CharType&
Char )
912 return (
Char >= CharType(
'a') &&
Char <= CharType(
'z')) || (
Char >= CharType(
'A') &&
Char <= CharType(
'Z'));
921 SetErrorMessage(
TEXT(
"Stream I/O Error"));
927 template <
typename Type>
930 if constexpr (std::is_same_v<Type, FString>)
952template <
typename CharType>
1019template <
class CharType>
1064template <
class CharType = TCHAR>
#define check(expr)
Definition AssertionMacros.h:314
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
typename TElementType< T >::Type TElementType_T
Definition ElementType.h:57
#define JSON_NOTATIONMAP_DEF
Definition JsonReader.h:14
EJsonNotation
Definition JsonTypes.h:60
EJsonToken
Definition JsonTypes.h:35
EJson
Definition JsonTypes.h:23
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition Archive.h:1208
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
virtual int64 Tell()
Definition Archive.h:149
virtual bool AtEnd()
Definition Archive.h:161
virtual void Seek(int64 InPos)
Definition Archive.h:1753
UE_FORCEINLINE_HINT bool IsError() const
Definition Archive.h:362
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 JsonReader.h:1066
static TSharedRef< TJsonReader< TElementType_T< StringType > > > Create(StringType &&JsonString)
Definition JsonReader.h:1070
static TSharedRef< TJsonReader< CharType > > CreateFromView(TStringView< CharType > JsonString)
Definition JsonReader.h:1085
static TSharedRef< TJsonReader< CharType > > Create(FArchive *const Stream)
Definition JsonReader.h:1080
TString< CharType > StringType
Definition JsonReader.h:1068
static TSharedRef< TJsonReader< TElementType_T< StringType > > > Create(const StringType &JsonString)
Definition JsonReader.h:1075
Definition JsonReader.h:41
bool BoolValue
Definition JsonReader.h:947
virtual ValueAsStringReturnType GetValueAsString() const
Definition JsonReader.h:166
uint32 LineNumber
Definition JsonReader.h:945
virtual const StoredStringType & GetInternalValueAsString() const
Definition JsonReader.h:180
double GetValueAsNumber() const
Definition JsonReader.h:192
bool SkipArray()
Definition JsonReader.h:159
bool Serialize(void *V, int64 Length)
Definition JsonReader.h:916
TJsonReader(FArchive *InStream)
Definition JsonReader.h:247
std::conditional_t< std::is_same_v< CharType, ANSICHAR >, FUtf8String, TString< CharType > > StoredStringType
Definition JsonReader.h:44
FString ErrorMessage
Definition JsonReader.h:942
virtual StoredStringType StealInternalValueAsString()
Definition JsonReader.h:186
TElementType_T< StoredStringType > StoredCharType
Definition JsonReader.h:45
const uint32 GetCharacterNumber() const
Definition JsonReader.h:220
EJsonToken CurrentToken
Definition JsonReader.h:938
void InlineCombineSurrogates(Type &String)
Definition JsonReader.h:928
uint32 CharacterNumber
Definition JsonReader.h:946
bool ReadNext(EJsonNotation &Notation)
Definition JsonReader.h:57
const FString & GetErrorMessage() const
Definition JsonReader.h:210
bool GetValueAsBoolean() const
Definition JsonReader.h:204
FString Identifier
Definition JsonReader.h:941
FArchive * Stream
Definition JsonReader.h:940
bool SkipObject()
Definition JsonReader.h:154
TArray< EJson > ParseState
Definition JsonReader.h:937
StoredStringType StringValue
Definition JsonReader.h:943
const StoredStringType & GetValueAsNumberString() const
Definition JsonReader.h:198
double NumberValue
Definition JsonReader.h:944
virtual const FString & GetIdentifier() const
Definition JsonReader.h:164
bool FinishedReadingRootObject
Definition JsonReader.h:948
virtual ~TJsonReader()
Definition JsonReader.h:55
TJsonReader()
Definition JsonReader.h:228
static TSharedRef< TJsonReader< CharType > > Create(FArchive *const Stream)
Definition JsonReader.h:48
std::conditional_t< std::is_same_v< StoredStringType, FString >, const FString &, FString > ValueAsStringReturnType
Definition JsonReader.h:46
const uint32 GetLineNumber() const
Definition JsonReader.h:215
Definition JsonReader.h:955
static TSharedRef< TJsonStringReader > Create(TString< CharType > &&JsonString)
Definition JsonReader.h:962
TJsonStringReader(const TString< CharType > &JsonString)
Definition JsonReader.h:982
TUniquePtr< FBufferReader > Reader
Definition JsonReader.h:1014
virtual ~TJsonStringReader()=default
TJsonStringReader(TString< CharType > &&JsonString)
Definition JsonReader.h:994
void InitReader()
Definition JsonReader.h:1001
static TSharedRef< TJsonStringReader > Create(const TString< CharType > &JsonString)
Definition JsonReader.h:957
const TString< CharType > Content
Definition JsonReader.h:1013
const TString< CharType > & GetSourceString() const
Definition JsonReader.h:967
Definition JsonReader.h:1022
TJsonStringViewReader(TStringView< CharType > JsonString)
Definition JsonReader.h:1041
virtual ~TJsonStringViewReader()=default
static TSharedRef< TJsonStringViewReader > Create(TStringView< CharType > JsonString)
Definition JsonReader.h:1025
TUniquePtr< FBufferReader > Reader
Definition JsonReader.h:1061
void InitReader()
Definition JsonReader.h:1048
TStringView< CharType > Content
Definition JsonReader.h:1060
Definition SharedPointer.h:153
BuilderType & AppendChar(AppendedCharType Char)
Definition StringBuilder.h:260
BuilderType & Append(const OtherCharType *const String, const int32 Length)
Definition StringBuilder.h:238
void Reset()
Definition StringBuilder.h:190
Definition StringBuilder.h:509
Definition StringView.h:107
Definition UniquePtr.h:107
UE_FORCEINLINE_HINT T * Get() const
Definition UniquePtr.h:324
@ IgnoreCase
Definition CString.h:26
CORE_API void InlineCombineSurrogates(FString &Str)
Definition String.cpp:49
Definition TestUtils.cpp:8
State
Definition PacketHandler.h:88
@ false
Definition radaudio_common.h:23
static int32 HexDigit(TCHAR c)
Definition Parse.h:152