A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
VaRestJsonValue.cpp
Go to the documentation of this file.
1// Copyright 2014-2019 Vladimir Alyamkin. All Rights Reserved.
2
3#include "VaRestJsonValue.h"
4
5#include "VaRestDefines.h"
6#include "VaRestJsonObject.h"
7
8UVaRestJsonValue::UVaRestJsonValue(const FObjectInitializer& ObjectInitializer)
9 : Super(ObjectInitializer)
10{
11}
12
14{
15 JsonVal = nullptr;
16}
17
18TSharedPtr<FJsonValue>& UVaRestJsonValue::GetRootValue()
19{
20 return JsonVal;
21}
22
23void UVaRestJsonValue::SetRootValue(TSharedPtr<FJsonValue>& JsonValue)
24{
25 JsonVal = JsonValue;
26}
27
29// FJsonValue API
30
32{
33 if (!JsonVal.IsValid())
34 {
35 return EVaJson::None;
36 }
37
38 switch (JsonVal->Type)
39 {
40 case EJson::None:
41 return EVaJson::None;
42
43 case EJson::Null:
44 return EVaJson::Null;
45
46 case EJson::String:
47 return EVaJson::String;
48
49 case EJson::Number:
50 return EVaJson::Number;
51
52 case EJson::Boolean:
53 return EVaJson::Boolean;
54
55 case EJson::Array:
56 return EVaJson::Array;
57
58 case EJson::Object:
59 return EVaJson::Object;
60
61 default:
62 return EVaJson::None;
63 }
64}
65
67{
68 if (!JsonVal.IsValid())
69 {
70 return "None";
71 }
72
73 switch (JsonVal->Type)
74 {
75 case EJson::None:
76 return TEXT("None");
77
78 case EJson::Null:
79 return TEXT("Null");
80
81 case EJson::String:
82 return TEXT("String");
83
84 case EJson::Number:
85 return TEXT("Number");
86
87 case EJson::Boolean:
88 return TEXT("Boolean");
89
90 case EJson::Array:
91 return TEXT("Array");
92
93 case EJson::Object:
94 return TEXT("Object");
95
96 default:
97 return TEXT("None");
98 }
99}
100
102{
103 if (!JsonVal.IsValid())
104 {
105 return true;
106 }
107
108 return JsonVal->IsNull();
109}
110
112{
113 if (!JsonVal.IsValid())
114 {
115 ErrorMessage(TEXT("Number"));
116 return 0.f;
117 }
118
119 return static_cast<float>(JsonVal->AsNumber());
120}
121
123{
124 if (!JsonVal.IsValid())
125 {
126 ErrorMessage(TEXT("Number"));
127 return 0.f;
128 }
129
130 return static_cast<int32>(JsonVal->AsNumber());
131}
132
134{
135 if (!JsonVal.IsValid())
136 {
137 ErrorMessage(TEXT("Number"));
138 return 0.f;
139 }
140
141 return static_cast<int64>(JsonVal->AsNumber());
142}
143
145{
146 if (!JsonVal.IsValid())
147 {
148 ErrorMessage(TEXT("String"));
149 return FString();
150 }
151
152 return JsonVal->AsString();
153}
154
156{
157 if (!JsonVal.IsValid())
158 {
159 ErrorMessage(TEXT("Boolean"));
160 return false;
161 }
162
163 return JsonVal->AsBool();
164}
165
166TArray<UVaRestJsonValue*> UVaRestJsonValue::AsArray() const
167{
168 TArray<UVaRestJsonValue*> OutArray;
169
170 if (!JsonVal.IsValid())
171 {
172 ErrorMessage(TEXT("Array"));
173 return OutArray;
174 }
175
176 TArray<TSharedPtr<FJsonValue>> ValArray = JsonVal->AsArray();
177 for (auto Value : ValArray)
178 {
179 UVaRestJsonValue* NewValue = NewObject<UVaRestJsonValue>();
180 NewValue->SetRootValue(Value);
181
182 OutArray.Add(NewValue);
183 }
184
185 return OutArray;
186}
187
189{
190 if (!JsonVal.IsValid())
191 {
192 ErrorMessage(TEXT("Object"));
193 return nullptr;
194 }
195
196 const TSharedPtr<FJsonObject> NewObj = JsonVal->AsObject();
197
198 UVaRestJsonObject* JsonObj = NewObject<UVaRestJsonObject>();
199 JsonObj->SetRootObject(NewObj);
200
201 return JsonObj;
202}
203
205// Helpers
206
207void UVaRestJsonValue::ErrorMessage(const FString& InType) const
208{
209 UE_LOG(LogVaRest, Error, TEXT("Json Value of type '%s' used as a '%s'."), *GetTypeString(), *InType);
210}
EVaJson
UENUM(BlueprintType)
UCLASS(BlueprintType, Blueprintable)
void SetRootObject(const TSharedPtr< FJsonObject > &JsonObject)
UCLASS(BlueprintType, Blueprintable)
TArray< UVaRestJsonValue * > AsArray() const
UFUNCTION(BlueprintCallable, Category = "VaRest|Json")
bool IsNull() const
UFUNCTION(BlueprintPure, Category = "VaRest|Json")
int32 AsInt32() const
UFUNCTION(BlueprintPure, Category = "VaRest|Json")
void Reset()
UFUNCTION(BlueprintCallable, Category = "VaRest|Json")
FString AsString() const
UFUNCTION(BlueprintPure, Category = "VaRest|Json")
int64 AsInt64() const
UFUNCTION(BlueprintPure, Category = "VaRest|Json")
void SetRootValue(TSharedPtr< FJsonValue > &JsonValue)
float AsNumber() const
UFUNCTION(BlueprintPure, Category = "VaRest|Json")
void ErrorMessage(const FString &InType) const
TSharedPtr< FJsonValue > & GetRootValue()
UVaRestJsonObject * AsObject()
UFUNCTION(BlueprintCallable, Category = "VaRest|Json")
bool AsBool() const
UFUNCTION(BlueprintPure, Category = "VaRest|Json")
TSharedPtr< FJsonValue > JsonVal
EVaJson GetType() const
UFUNCTION(BlueprintPure, Category = "VaRest|Json")
FString GetTypeString() const
UFUNCTION(BlueprintPure, Category = "VaRest|Json")