ue4¿¡¼ json »ç¿ë ÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ ¾Ë¾Æ º»´Ù. XXX.Build.cs ÆÄÀÏ¿¡ ´ÙÀ½ Ç׸ñÀ» Ãß°¡ÇÑ´Ù. PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG", "Json", "JsonUtilities" });
FJsonObjectConverter¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é "JsonUtilities"´Â Ãß°¡ ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. Json ÆÄÀÏ °æ·Î ±¸Çϱâ¾ð¸®¾ó ÇÁ·ÎÁ§Æ®¿¡¼ mytest.jsonÀ̶ó´Â ÆÄÀÏÀ» °¡Á®¿Â´Ù.//FilePath Test
#include "Misc/Paths.h" FString TestFilePath() { //FString MyFilePath = FPaths::ProjectConfigDir(); FString FilePath = FPaths::ProjectDir(); FilePath.Append(TEXT("mytest.json")); IPlatformFile& FileManager = FPlatformFileManager::Get().GetPlatformFile(); if (FileManager.FileExists(*FilePath)) { UE_LOG(LogTemp, Warning, TEXT("FilePaths: File found!")); } else { UE_LOG(LogTemp, Warning, TEXT("FilePaths: File not found!")); } return FilePath; } mytest.json ÆÄÀÏ ³»¿ë{
"name": "È« ±æµ¿", "age": 32, "arr": [1, 2, 3, 4] } jsonÀ» Àдµ¥ ÇÊ¿äÇÑ Çì´õ//Json Test
#include "Misc/FileHelper.h" #include "Serialization/JsonReader.h" #include "Dom/JsonObject.h" #include "Serialization/JsonSerializer.h" ±âº» Àбâjson ÆÄÀÏÀ» Àд´Ù.TSharedRef<TJsonReader<TCHAR>> reader = TJsonReaderFactory<TCHAR>::Create(jsonstr); FJsonObject¸¦ »ý¼º ÇÑ´Ù. TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); Àоî¿Â µ¥ÀÌÅ͸¦ FJsonObject·Î ¿ªÁ÷·ÄÈ ÇÑ´Ù. FJsonSerializer::Deserialize(reader, JsonObject) && JsonObject.IsValid() °ªÀ» ¾ò¾î ¿Ã¶§´Â GetXXX ÇÔ¼ö¿Í TryGetXXX µÎ°¡Áö °è¿ÀÇ ÇÔ¼ö°¡ ÀÖ´Ù. TryGetStringField ÇÔ¼ö´Â Json¿¡ Å°°ªÀÌ ¾øÀ¸¸é ÇÒ´ç ÇÏÁö ¾Ê´Â´Ù. int age = JsonObject->GetIntegerField(TEXT("age")); FString Name; JsonObject->TryGetStringField("name", Name); void AUmgListViewDemoGameModeBase::TestJson(const FString& FilePath)
{ FString filePath = FilePath; FString jsonstr; FFileHelper::LoadFileToString(jsonstr, *filePath); TSharedRef<TJsonReader<TCHAR>> reader = TJsonReaderFactory<TCHAR>::Create(jsonstr); TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); if (FJsonSerializer::Deserialize(reader, JsonObject) && JsonObject.IsValid()) { int age = JsonObject->GetIntegerField(TEXT("age")); FString Name = JsonObject->GetStringField(TEXT("name")); //convert string FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer); UE_LOG(LogTemp, Warning, TEXT("resulting jsonString -> %s"), *OutputString); } } Àüü JsonÀ» Ãâ·Â ÇÑ´Ù. FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer); UE_LOG(LogTemp, Warning, TEXT("resulting jsonString -> %s"), *OutputString); ¹è¿ Àбâ¹è¿À» ¼±¾ðÇÏ°í TryGetArrayField·Î ¹è¿À» Àд´Ù.const TArray<TSharedPtr<FJsonValue>>* list; bool res = JsonObject->TryGetArrayField(TEXT("arr"), list); ¹è¿À» ´ÙÀ½°ú °°ÀÌ ¹Ýº¹ ó¸® ÇÑ´Ù. for (TSharedPtr<FJsonValue> JsonItem : *list) void AUmgListViewDemoGameModeBase::TestJson1(const FString& FilePath)
{ FString jsonstr; FFileHelper::LoadFileToString(jsonstr, *FilePath); TSharedRef<TJsonReader<TCHAR>> reader = TJsonReaderFactory<TCHAR>::Create(jsonstr); TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); if (FJsonSerializer::Deserialize(reader, JsonObject) && JsonObject.IsValid()) { const TArray<TSharedPtr<FJsonValue>>* list; bool res = JsonObject->TryGetArrayField(TEXT("arr"), list); for (TSharedPtr<FJsonValue> JsonItem : *list) { int num = JsonItem->AsNumber(); UE_LOG(LogTemp, Warning, TEXT("arr num : %d"), num); } } } ±¸Á¶Ã¼ Àбâ1XXX.Build.cs ÆÄÀÏ¿¡ "JsonUtilities"¸¦ Ãß°¡ ÇÑ´Ù.FJsonObjectConverterÀ» »ç¿ëÇÏ·Á¸é JsonObjectConverter.h¸¦ Æ÷ÇÔ ÇÑ´Ù. #include "JsonObjectConverter.h" void AUmgListViewDemoGameModeBase::TestJson2(const FString& FilePath)
{ FString jsonstr; FFileHelper::LoadFileToString(jsonstr, *FilePath); TSharedRef<TJsonReader<TCHAR>> reader = TJsonReaderFactory<TCHAR>::Create(jsonstr); TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); if (FJsonSerializer::Deserialize(reader, JsonObject) && JsonObject.IsValid()) { FStudent student; bool res = FJsonObjectConverter::JsonObjectToUStruct(JsonObject.ToSharedRef(), &student, 0, 0); UE_LOG(LogTemp, Warning, TEXT("student : %s, %d"), *student.name, student.age); } } Json ±¸Á¶¿Í ºñ½ÁÇÑ FStudent ±¸Á¶Ã¼¸¦ ¸¸µç´Ù. USTRUCT(BlueprintType)
struct FStudent { GENERATED_USTRUCT_BODY() public: UPROPERTY() FString name; UPROPERTY() int age; UPROPERTY() TArray<int> arr; }; FJsonObjectConverter::JsonObjectToUStruct ÇÔ¼ö·Î ±¸Á¶Ã¼¸¦ Àд´Ù. FStudent student; bool res = FJsonObjectConverter::JsonObjectToUStruct(JsonObject.ToSharedRef(), &student, 0, 0); ¿ÀºêÁ§Æ® ¹è¿ Àбâ¹è¿ÀÇ FJsonObject´Â AsObject·Î Àд´Ù.for (TSharedPtr<FJsonValue> JsonItem : *list) { TSharedPtr<FJsonObject> ChildObj = JsonItem->AsObject(); ...... } void AUmgListViewDemoGameModeBase::TestObjJson(const FString& FilePath)
{ FString jsonstr; FFileHelper::LoadFileToString(jsonstr, *FilePath); TSharedRef<TJsonReader<TCHAR>> reader = TJsonReaderFactory<TCHAR>::Create(jsonstr); TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); if (FJsonSerializer::Deserialize(reader, JsonObject) && JsonObject.IsValid()) { const TArray<TSharedPtr<FJsonValue>>* list; bool res = JsonObject->TryGetArrayField(TEXT("student"), list); for (TSharedPtr<FJsonValue> JsonItem : *list) { TSharedPtr<FJsonObject> ChildObj = JsonItem->AsObject(); FString firstName = ChildObj->GetStringField(TEXT("firstName")); UE_LOG(LogTemp, Warning, TEXT("firstName : %s"), *firstName); } } } ±¸Á¶Ã¼ Àбâ2myobj_dirty.json ÆÄÀÏ{
"Class": 3, "student": [ { "firstName": "chulsoo", "lastName": "kim", "gender": "man", "age": 3 }, { "firstName": "younghee" } ] } MyData.h ÆÄÀÏ¿¡¼ FMember ±¸Á¶Ã¼ USTRUCT(BlueprintType)
struct FPeople { GENERATED_USTRUCT_BODY() public: UPROPERTY() FString firstName; UPROPERTY() FString lastName; UPROPERTY() FString gender; UPROPERTY() int age; }; USTRUCT(BlueprintType) struct FMember { GENERATED_USTRUCT_BODY() public: UPROPERTY() int Class; UPROPERTY() TArray<FPeople> student; }; youngheeÀÇ µ¥ÀÌÅÍ´Â lastName, age ¼Ó¼ºÀÌ ºüÁ® À־ FJsonObjectConverter::JsonObjectToUStruct ÇÔ¼ö·Î ±¸Á¶Ã¼¸¦ Àдµ¥´Â ¹®Á¦°¡ ¾ø´Ù. FMember member; bool mres = FJsonObjectConverter::JsonObjectToUStruct(JsonObject.ToSharedRef(), &member, 0, 0); void AUmgListViewDemoGameModeBase::TestObjJson1(const FString& FilePath)
{ FString jsonstr; FFileHelper::LoadFileToString(jsonstr, *FilePath); TSharedRef<TJsonReader<TCHAR>> reader = TJsonReaderFactory<TCHAR>::Create(jsonstr); TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); if (FJsonSerializer::Deserialize(reader, JsonObject) && JsonObject.IsValid()) { FMember member; bool mres = FJsonObjectConverter::JsonObjectToUStruct(JsonObject.ToSharedRef(), &member, 0, 0); UE_LOG(LogTemp, Warning, TEXT("resulting jsonString -> %s, %s, %d"), *member.student[0].firstName, *member.student[0].lastName, member.student[0].age); UE_LOG(LogTemp, Warning, TEXT("resulting jsonString -> %s, %s, %d"), *member.student[1].firstName, *member.student[1].lastName, member.student[1].age); } } ´Ù¿î·Îµå: mytest.json myobj.json myobj_dirty.json MyData.h UmgListViewDemoGameModeBase.cpp BasicUITest_Json.zip Âü°í) TryGetArrayField TSharedPtr<FJsonObject> Object = Value.AsObject(); https://ballbot.tistory.com/45 https://cpp.hotexamples.com/examples/-/FHttpResponsePtr/GetContentAsString/cpp-fhttpresponseptr-getcontentasstring-method-examples.html https://www.fourat-djellouli.com/post/how-to-use-json-with-unreal |