값을 읽고잘 할때는 SharedPtr // 오브젝트가 없을수도 있으니
값을 써야할때는 SharedRef // 반드시 오브젝트가 있어야 거기에다가 쓰니까
// 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" });
}
}
#include "Dom/JsonObject.h"
#include "Serialization/JsonReader.h"
#include "Serialization/JsonSerializer.h"
// JsonObject 하나 만들기
TSharedRef<FJsonObject> RequestObj = MakeShared<FJsonObject>(); // Json object, 추후에 이 값을 Fstring 으로 직렬화 해서 옮길것이다.
RequestObj->SetStringField(TEXT("userId"), userId);
RequestObj->SetStringField(TEXT("userPw"), userPw);
// 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; )
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 값 가져오기
}
}