picojsonを使ってみるという記事と同様にUnreal Engine4でパースしてみました。
{
"name": "sacchy"
}
FString jsonData = "{\"name\":\"sacchy\"}";
TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(jsonData);
FJsonSerializer::Deserialize(JsonReader, Data);
UE_LOG(LogTemp, Warning, TEXT("Response: %s"), *jsonData);
UE_LOG(LogTemp, Warning, TEXT("nameは%sです"), *Data->GetStringField(TEXT("name")));
{
"Human": {
"name": "sacchy"
}
}
FString jsonData = "{\"Human\":{\"name\":\"sacchy\"}}";
TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(jsonData);FJsonSerializer::Deserialize(JsonReader, Data);
TSharedPtr<FJsonObject> object = Data->GetObjectField(TEXT("Human"));
UE_LOG(LogTemp, Warning, TEXT("Response: %s"), *jsonData);
UE_LOG(LogTemp, Warning, TEXT("nameは%sです"), *object->GetStringField(TEXT("name")));

{
"array": [
{
"Human": {
"name": "sacchy"
}
}
]
}
FString jsonData = "{\"array\":[{\"Human\":{\"name\":\"sacchy\"}}]}";
TSharedRef<TJsonReader<TCHAR>> jsonreader= TJsonReaderFactory<TCHAR>::Create(jsonData);
FJsonSerializer::Deserialize(JsonReader, Data);
TArray<TSharedPtr<FJsonValue>> objectarray= Data->GetArrayField(TEXT("array"));
TSharedPtr<FJsonValue> value = objectArray[0];
TSharedPtr<FJsonObject> json = value->AsObject();
TSharedPtr<FJsonObject> object = json->GetObjectField(TEXT("Human"));
UE_LOG(LogTemp, Warning, TEXT("Response: %s"), *jsonData);
UE_LOG(LogTemp, Warning, TEXT("nameは%sです"), *object->GetStringField(TEXT("name")));

[
{
"Human": {
"name": "sacchy"
}
}
]
FString jsonData = "[{\"Human\":{\"name\":\"sacchy\"}}]";
TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(jsonData);
TArray<TSharedPtr<FJsonValue>> objectArray;
FJsonSerializer::Deserialize(JsonReader, objectArray);
TSharedPtr<FJsonValue> value = objectArray[0];
TSharedPtr<FJsonObject> json = value->AsObject();
TSharedPtr<FJsonObject> object = json->GetObjectField(TEXT("Human"));
UE_LOG(LogTemp, Warning, TEXT("Response: %s"), *jsonData);
UE_LOG(LogTemp, Warning, TEXT("nameは%sです"), *object->GetStringField(TEXT("name")));
以上です。毎回、配列に名前がないデータ形式にハマってしまいます。とりあえずこれでなんとかなりそうです。picojsonの記事と同様におまけでGoogle App Scriptを使ってJsonデータを取得した時のBluePrintを貼っておきます。どうも、「Post」だとダメなようでした。Json QueryPluginを利用しています。

ちなみに「Get Data関数」はJson Query Pluginのソースを改造しています。SQLiteを使う予定なのでこの関数を使うことはなさそうですが、検証という意味で作ってみました。必要のないところは記述してません。
private:
enum class EPieceType
{
Num = 0,
Table,
};
struct FPiece
{
FString Num;
FString Table;
FPiece(FString InNum, FString InTable) :
Num(InNum),
Table(InTable)
{
}
};
TMap<int32, FPiece> gameDataMap;
public:
UFUNCTION(BlueprintPure, meta = (FriendlyName = "Get Data", HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"), Category = "JSON")
FString getDataByIdx(int32 idx);
void UJsonFieldData::OnReady(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
// 省略
TArray<TSharedPtr<FJsonValue>> objArray = Data->GetArrayField(TEXT("master"));
for (int32 i = 0; i < objArray.Num(); i++)
{
TArray<TSharedPtr<FJsonValue>> objArray2 = objArray[i]->AsArray();
TSharedPtr<FJsonValue> value = objArray2[0];
TSharedPtr<FJsonObject> json = value->AsObject();
FString numStr = json->GetStringField(TEXT("num"));
FString tableStr = json->GetStringField(TEXT("table"));
FPiece NewPiece(numStr, tableStr);
gameDataMap.Add(i, NewPiece);
}
// Assign the request content
Content = Response->GetContentAsString();
// Broadcast the result event
OnGetResult.Broadcast();
}
FString UJsonFieldData::getDataByIdx(int32 idx)
{
FPiece Piece = gameDataMap[idx];
UE_LOG(LogTemp, Warning, TEXT("テーブルの名前は%s"), *Piece.Table);
FString resStr = FString::Printf(TEXT("テーブルの名前は%s"), *Piece.Table);
return resStr;
}
これでテーブルの名前がうまくログに表示されました。GASから返される値によってパース部分を変更してみてください。今回はstd::mapと同様に使えるTMapもついでに学べて良かったです。c++なのにc++じゃないUE4独特な書き方に慣れるのはまだまだ先のようです。