Unreal/C++

[UE4] Json 에서 배열 값 얻기 (JSonArray) from Http

혜멘 2022. 2. 24. 14:57

Get Array from Http Json

php 파일로부터 웹 상에 존재하는 파일 리스트를 받아오는 방법에 대해 포스팅 하려고 한다

php의 주소 지정은 블루프린트를 이용하여 Http Call 함수에 전달해주었고 아래 함수는 HttpCall에 바인드 된 함수이다.

 

기본적인 json 형식의 데이터를 받아오는 것은 다른 블로그에도 많아서, 내가 찾는데 애먹었던 배열을 얻는 기능만 써두려고 한다.

 

{ "key" : [ "value0" , "value1", ... , :valueN"] } 형식의 array를 받아오는데 쓰이는 코드이다.

 

void AMyHttpActor::OnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool vWasSuccessful)
{

	TSharedPtr<FJsonObject> JsonObj = MakeShareable(new FJsonObject());
	FString MsgBody = Response->GetContentAsString();
	TSharedRef<TJsonReader<TCHAR>> Reader = TJsonReaderFactory<TCHAR>::Create(*MsgBody);
    
	if (FJsonSerializer::Deserialize(Reader, JsonObj))
	{
		auto Values = JsonObj->GetArrayField("key");
		for (int i = 0; i < Values.GetAllocatedSize(); i++) {
			UE_LOG(LogTemp, Warning, TEXT("%s"), Values[0]->AsString());
		}
    }
 }

 

Values의 타입은 TArray<TSharedRef<FJsonValue>> 이고, 내가 얻고싶은 배열 값의 타입은 String 이므로 FJsonValue를 String 형식으로 바꿔주는 AsString() 함수를 사용해야 한다.

그 전에 먼저 TArray 형식이므로 인덱스로 접근한 뒤, 포인터 역할을 하는 TSharedRef가 감싸고 있으므로 . 이 아니라 -> 을 통해 접근하도록 한다.

 

따라서, Values[0]->AsString(); 을 통해 "value0" 을 얻을 수 있다.