2016年3月5日土曜日

UE4.x Jsonのテスト1

*.Build.cs の PublicDependencyModuleNames に Json を追加してビルドした

Jsonのパーステスト

#include "Json.h"  // 追加

void TestJson1() {

 FString jsonData = 
 "{\
  \"objArray\" : [\
   { \"pos\": [1.23, 2.33, 1.2345], \"rot\": [ 0.0, 0.0, 0.0] },\
   { \"pos\": [10.23, 20.33, 10.2345], \"rot\": [ 3.0, 6.0, 9.0] },\
   { \"pos\": [20.23, 40.33, 20.2345], \"rot\": [ 10.0, 20.0, 30.0] }\
  ]\
 }";

 // jsonDataをデシリアイズする
 TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject);
 TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(jsonData);
 bool result = FJsonSerializer::Deserialize(JsonReader, JsonObject);

 // objArrayを取得
 // フィールド名から配列を取得
 const TArray< TSharedPtr<FJsonValue> >& objArray = JsonObject->GetArrayField(TEXT("objArray"));
 for(int32 i = 0; i < objArray.Num(); i++)
 {
  // 配列内のJSONオブジェクトをパース
  // FJsonObjectに変換
  const TSharedPtr<FJsonObject>& Obj = objArray[i]->AsObject();

  const TArray< TSharedPtr<FJsonValue> >& pos = Obj->GetArrayField(TEXT("pos"));
  for(int32 i = 0; i < pos.Num(); i++)
  {
   UE_LOG(LogTemp, Display, TEXT("pos %d %lf"), i, pos[i]->AsNumber());
  }

  const TArray< TSharedPtr<FJsonValue> >& rot = Obj->GetArrayField(TEXT("rot"));
  for(int32 i = 0; i < rot.Num(); i++)
  {
   UE_LOG(LogTemp, Display, TEXT("rot %d %lf"), i, rot[i]->AsNumber());
  }
 }
}

0 件のコメント: