Skip to the content.

UE4解析Json

蛮常规的一个功能点 直接看代码

从本地拿到json文件

//.h

	UFUNCTION(BlueprintCallable)
	static bool ReadFileToString(const FString& filePath, FString& fileData);
-----------------------------------------
//.cpp
    bool UFunctionLibrary::ReadFileToString(const FString& filePath, FString& fileData)
    {
        if (FPaths::ValidatePath(filePath) && FPaths::FileExists(filePath))
        {
            return FFileHelper::LoadFileToString(fileData, *filePath);
        }
        return false;
    }

对Json的序列化与反序列化

//.h
	static bool StringToJsonObject(const FString& StringJson, TSharedPtr<FJsonObject>& JsonObject);

	static bool JsonObjectToString(const TSharedPtr<FJsonObject>& JsonObject, FString& StringJson);
--------------------------------------
//.cpp
    bool UFunctionLibrary::StringToJsonObject(const FString& StringJson, TSharedPtr<FJsonObject>& JsonObject)
    {
        if (StringJson.IsEmpty())
        {
            JsonObject = nullptr;
            return false;
        }
        
        TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(*StringJson);
        TSharedPtr<FJsonObject> OutJsonObj = MakeShareable(new FJsonObject);
        if (FJsonSerializer::Deserialize(Reader, OutJsonObj))
        {
            JsonObject = OutJsonObj;
            return true;
        }
        else
        {
            JsonObject = nullptr;
            return false;
        }
    }

    bool UFunctionLibrary::JsonObjectToString(const TSharedPtr<FJsonObject>& JsonObject, FString& StringJson)
    {
        if (JsonObject == nullptr)
        {
            return false;
        }
        TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&StringJson);
        FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer);
        return true;
    }

FJsonValue的一些常用API

    //数组
    TArray<TSharedPtr<FJsonValue>> ArrayName = _jsonObject->GetArrayField("JsonArrayName");
    //常量
    FString name =_jsonObject->GetStringField("userName");
    int id = _jsonObject->GetNumberField("userId");
    //嵌套
    TSharedPtr<FJsonObject> JsonObject = _jsonObject->GetObjectField("ObjectName");