198 lines
8.3 KiB
C++
198 lines
8.3 KiB
C++
// Modifications Copyright 2018-current Getnamo. All Rights Reserved
|
|
|
|
|
|
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
|
|
// Copyright 2014 Vladimir Alyamkin. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "Runtime/Json/Public/Dom/JsonObject.h"
|
|
#include "SIOJsonObject.generated.h"
|
|
|
|
class USIOJsonValue;
|
|
|
|
/**
|
|
* Blueprintable FJsonObject wrapper
|
|
*/
|
|
UCLASS(BlueprintType, Blueprintable)
|
|
class SIOJSON_API USIOJsonObject : public UObject
|
|
{
|
|
GENERATED_UCLASS_BODY()
|
|
|
|
/** Create new Json object, cannot be pure */
|
|
UFUNCTION(BlueprintCallable , meta = (DisplayName = "Construct Json Object", KeyWords = "create make", HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"), Category = "SIOJ|Json")
|
|
static USIOJsonObject* ConstructJsonObject(UObject* WorldContextObject);
|
|
|
|
/** Reset all internal data */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void Reset();
|
|
|
|
/** Get the root Json object */
|
|
TSharedPtr<FJsonObject>& GetRootObject();
|
|
|
|
/** Set the root Json object */
|
|
void SetRootObject(const TSharedPtr<FJsonObject>& JsonObject);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Serialization
|
|
|
|
/** Serialize Json to string (formatted with line breaks) */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
FString EncodeJson() const;
|
|
|
|
/** Serialize Json to string (single string without line breaks) */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
FString EncodeJsonToSingleString() const;
|
|
|
|
/** Construct Json object from string */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
bool DecodeJson(const FString& JsonString);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// FJsonObject API
|
|
|
|
/** Returns a list of field names that exist in the object */
|
|
UFUNCTION(BlueprintPure, Category = "SIOJ|Json")
|
|
TArray<FString> GetFieldNames();
|
|
|
|
/** Checks to see if the FieldName exists in the object */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
bool HasField(const FString& FieldName) const;
|
|
|
|
/** Remove field named FieldName */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void RemoveField(const FString& FieldName);
|
|
|
|
/** Get the field named FieldName as a JsonValue */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
USIOJsonValue* GetField(const FString& FieldName) const;
|
|
|
|
/** Add a field named FieldName with a Value */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetField(const FString& FieldName, USIOJsonValue* JsonValue);
|
|
|
|
/** Get the field named FieldName as a Json Array */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
TArray<USIOJsonValue*> GetArrayField(const FString& FieldName);
|
|
|
|
/** Set an ObjectField named FieldName and value of Json Array */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetArrayField(const FString& FieldName, const TArray<USIOJsonValue*>& InArray);
|
|
|
|
/** Adds all of the fields from one json object to this one */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void MergeJsonObject(USIOJsonObject* InJsonObject, bool Overwrite);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// FJsonObject API Helpers (easy to use with simple Json objects)
|
|
|
|
/** Attempt to get the field named FieldName as a number; returns false if it doesn't exist or the type is incorrect.
|
|
* Attn.!! float used instead of double to make the function blueprintable! */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
bool TryGetNumberField(const FString& FieldName, float& OutNumber) const;
|
|
|
|
/** Get the field named FieldName as a number. Ensures that the field is present and is of type Json number.
|
|
* Attn.!! float used instead of double to make the function blueprintable! */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
float GetNumberField(const FString& FieldName) const;
|
|
|
|
/** Add a field named FieldName with Number as value
|
|
* Attn.!! float used instead of double to make the function blueprintable! */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetNumberField(const FString& FieldName, float Number);
|
|
|
|
/** Attempt to get the field named FieldName as a string; returns false if it doesn't exist or the type is incorrect. */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
bool TryGetStringField(const FString& FieldName, FString& OutString) const;
|
|
|
|
/** Get the field named FieldName as a string. */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
FString GetStringField(const FString& FieldName) const;
|
|
|
|
/** Add a field named FieldName with value of StringValue */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetStringField(const FString& FieldName, const FString& StringValue);
|
|
|
|
/** Attempt to get the field named FieldName as a boolean; returns false if it doesn't exist or the type is incorrect. */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
bool TryGetBoolField(const FString& FieldName, bool& OutBool) const;
|
|
|
|
/** Get the field named FieldName as a boolean. */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
bool GetBoolField(const FString& FieldName) const;
|
|
|
|
/** Set a boolean field named FieldName and value of InValue */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetBoolField(const FString& FieldName, bool InValue);
|
|
|
|
/** Attempt to get the field named FieldName as an object; returns false if it doesn't exist or the type is incorrect. */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
bool TryGetObjectField(const FString& FieldName, USIOJsonObject*& OutObject) const;
|
|
|
|
/** Get the field named FieldName as a Json object. */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
USIOJsonObject* GetObjectField(const FString& FieldName) const;
|
|
|
|
/** Set an ObjectField named FieldName and value of JsonObject */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetObjectField(const FString& FieldName, USIOJsonObject* JsonObject);
|
|
|
|
/** Get the field named FieldName as a binary buffer array. */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void GetBinaryField(const FString& FieldName, TArray<uint8>& OutBinary) const;
|
|
|
|
/** Set an BinaryField named FieldName and binary buffer array */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetBinaryField(const FString& FieldName, const TArray<uint8>& Bytes);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Array fields helpers (uniform arrays)
|
|
|
|
/** Get the field named FieldName as a Number Array. Use it only if you're sure that array is uniform!
|
|
* Attn.!! float used instead of double to make the function blueprintable! */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
TArray<float> GetNumberArrayField(const FString& FieldName);
|
|
|
|
/** Set an ObjectField named FieldName and value of Number Array
|
|
* Attn.!! float used instead of double to make the function blueprintable! */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetNumberArrayField(const FString& FieldName, const TArray<float>& NumberArray);
|
|
|
|
/** Get the field named FieldName as a String Array. Use it only if you're sure that array is uniform! */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
TArray<FString> GetStringArrayField(const FString& FieldName);
|
|
|
|
/** Set an ObjectField named FieldName and value of String Array */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetStringArrayField(const FString& FieldName, const TArray<FString>& StringArray);
|
|
|
|
/** Get the field named FieldName as a Bool Array. Use it only if you're sure that array is uniform! */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
TArray<bool> GetBoolArrayField(const FString& FieldName);
|
|
|
|
/** Set an ObjectField named FieldName and value of Bool Array */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetBoolArrayField(const FString& FieldName, const TArray<bool>& BoolArray);
|
|
|
|
/** Get the field named FieldName as an Object Array. Use it only if you're sure that array is uniform! */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
TArray<USIOJsonObject*> GetObjectArrayField(const FString& FieldName);
|
|
|
|
/** Set an ObjectField named FieldName and value of Ob Array */
|
|
UFUNCTION(BlueprintCallable, Category = "SIOJ|Json")
|
|
void SetObjectArrayField(const FString& FieldName, const TArray<USIOJsonObject*>& ObjectArray);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Data
|
|
|
|
private:
|
|
/** Internal JSON data */
|
|
TSharedPtr<FJsonObject> JsonObj;
|
|
|
|
};
|