메모내용
Nav

JSON

Tip

                        
값을 읽고잘 할때는 SharedPtr    // 오브젝트가 없을수도 있으니

값을 써야할때는 SharedRef   // 반드시 오브젝트가 있어야 거기에다가 쓰니까
                        
                    

1. Project.Build.cs 파일에 모듈( ”JsonUtilities”, “Json” ) 추가

                        
// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;

public class MV_fairytail : ModuleRules
{
	public MV_fairytail(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "HTTP", "JsonUtilities", "Json" });
	}
}
                        
                    

2. 헤더파일 추가

                        
#include "Dom/JsonObject.h"
#include "Serialization/JsonReader.h"
#include "Serialization/JsonSerializer.h"
                        
                    

3. JSON Object 만들고 값 넣기

                        
// JsonObject 하나 만들기
	TSharedRef<FJsonObject> RequestObj = MakeShared<FJsonObject>(); // Json object, 추후에 이 값을 Fstring 으로 직렬화 해서 옮길것이다.
	RequestObj->SetStringField(TEXT("userId"), userId);
	RequestObj->SetStringField(TEXT("userPw"), userPw);
                        
                    

4. Json Object 의 값을 FString 에 옮겨넣기 ( TJsonWriter 사용 )

                        
                            	// Json 으로 쓰여진 값 받을 FString 선언하고 받기
	FString RequestBody; // Json 값 받을 FString
	TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&RequestBody); // Json 작성기 공장에서 , 하나 Json작성기 하나 생성해서 저장소로 FString RequestBody 의 주소를 준다.
	FJsonSerializer::Serialize(RequestObj, Writer); // Writer 을 사용하여, JsonObj 의 내용을 FString 으로 작성하여 저장. ( FJsonObject RequsetObj --> TJasonWriter --> FString; )
                        
                    

5. FString 값을 JSON Object 로 읽기

                        
    TSharedPtr<FJsonObject> JsonObj;	// Json 내용을 받을 JsonObject
	TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(FString); // FString 내용을 Json 으로 읽는 Json Reader 생성

	if (FJsonSerializer::Deserialize(Reader, JsonObj)){

			if( JsonObj->HasField(TEXT("data")) ) // 특정 필드가 있는지 확인하기
			{
					TSharedPtr<FJsonObject> data = JsonObj->GetObjectField(TEXT("data")); // 오브젝트로 가져오기
					JsonObj->GetStringField(TEXT("message")); // string 값 가져오기
					JsonObj->GetIntegerField(TEXT("count"));  // integer 값 가져오기
			}
	}