[언리얼엔진] Json 파일 저장하기

    언리얼의 데이터를 json 파일로 추출하는 방법에 대해 알아보자

    예제 파일

    이전 로드 예제에서 사용했던 예제파일과 동일하게 출력되도록 할 예정이다.

    {
        "name" : "Kim"
        "level" : 20,
        "items" : [
            {
                "itemid" : 100,
                "count" : 3,
            }
            {
                "itemid" : 200,
                "count" : 1,
            }
        ]
        "skills" : [
            "fireball",
            "icebolt",
        ]
    }

    파일 내용 작성

    JsonWriter에 직접 Key Value를 입력하는 방법과 데이터를 가공한 JsonObject가 있다면 FJsonSerializer::Serialize 함수를 통해 자동 입력하는 방법이 있다.

        //Key Value 입력하는 방식
        FString FileStr;
        FString FilePath = TEXT("path/test.json");
        TShareRef<TJsonWriter<TCHAR>> Writer = TJsonWriterFactory<>::Create(&FileStr);
    
        Writer->WriteObjectStart();
    
        Writer->WriteValue(TEXT("Name"), CharName);
        Writer->WriteValue(TEXT("level"), Level);
        Writer->WriteArrayStart(TEXT("items"));
        for(FItemData& ItemData : ItemDatas)
        {
            Writer->WriteObjectStart();
            Writer->WriteValue(TEXT("itemid"), ItemData.ItemID);
            Writer->WriteValue(TEXT("count"), ItemData.Count);
            Writer->WriteObjectEnd();
        }
        FModuleDescriptor::WriteArray(Writer.Get(), TEXT("skills"), Skills); //TArray<FString> Skills;
    
        Writer->WriteObjectEnd();
        Writer->close();
    
        FFileHelper::SaveStringToFile(*FileStr, *filePath);
    
    
    //JsonObject를 만들어 Serialize 하는 방식
    
        TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject);
    
        JsonObject->SetStringField(TEXT("Name"), CharName);
        JsonObject->SetNumberField(TEXT("level"), Level);
    
    
        TArray< TSharedPtr<FJsonValue> > ItemsObj;
        for(FItemData& ItemData : ItemDatas)
        {
            TSharedPtr<FJsonObject> ItemObj = MakeShareable(new FJsonObject);
            ItemObj->SetNumberField(TEXT("itemid"), ItemData.ItemID);
            ItemObj->SetNumberField(TEXT("count"), ItemData.Count);
    
            ItemsObj.Add(MakeShareable(new FJsonValueObject(ItemObj));
        }
        JsonObject->SetArrayField(TEXT("items"), ItemsObj);
    
        TArray< TSharedPtr<FJsonValue> > SkillsObj;
        for(FString& SkillName : Skills)
        {
            TSharedPtr<FJsonValueString> SkillObj = MakeShareable(new FJsonObject(SkillName));
            SkillsObj.Add(SkillObj);
        }
        JsonObject->SetArrayField(TEXT("skills"), SkillsObj);
    
        FString FileStr;
        FString FilePath = TEXT("path/test.json");
        TShareRef<TJsonWriter<TCHAR>> Writer = TJsonWriterFactory<>::Create(&FileStr);
    
        FFileHelper::SaveStringToFile(*FileStr, *filePath);

    문서

    https://docs.unrealengine.com/4.27/en-US/API/Runtime/Json/Serialization/TJsonStringWriter/

    반응형

    댓글

    Designed by JB FACTORY