EasyJsonParser V2

Table of Contents

ドット記法を使った直感的なJSONアクセスに加え、強力な書き込み機能を提供する高性能プラグイン。

概要

EasyJsonParser V2は、Unreal EngineでのJSON処理を革新的に簡素化する強力なプラグインです。ゲーム開発において、設定ファイルの読み込み、セーブデータの管理、APIとの通信、動的なコンテンツ配信など、JSON形式のデータ処理は不可欠です。本プラグインは、これらの作業を驚くほどシンプルにし、開発効率を大幅に向上させます。

なぜEasyJsonParser V2を選ぶべきか

従来のUnreal EngineのJSON処理は、複雑なAPIと煩雑なエラーハンドリングが必要でした。EasyJsonParser V2は、この問題を解決するために設計されました:

  • 直感的なアクセス方法: player.stats.level のようなドット記法で、ネストされたデータに簡単にアクセス
  • 型安全な操作: 各データ型に対応した専用メソッドで、実行時エラーを防止
  • 高速パフォーマンス: USTRUCTベースの軽量実装により、メモリ使用量を大幅削減
  • 完全なBlueprintサポート: C++の知識がなくても、すべての機能をBlueprintから利用可能

V1をお使いの方へ: このプラグインにはV1、V2両方のモジュールが含まれているため、どちらでもお好きな方をご利用いただけます。V1の使い方についてはこちらをご覧ください。

Version 2.0 の新機能

パフォーマンスの向上

軽量アーキテクチャの採用 V2では、UObjectベースの実装からUSTRUCTベースに変更しました。これにより:

  • メモリ使用量が大幅削減
  • ガベージコレクション(GC)の負荷が最小限に
  • 大量のJSONオブジェクトを扱う際のパフォーマンスが大幅に向上

新機能の詳細

完全な書き込み機能 V2では、JSONの読み取りだけでなく、作成・編集が可能になりました:

  • 新規JSONドキュメントの作成
  • 既存JSONの編集と更新
  • 動的なデータ構造の構築
  • ゲーム内でのセーブデータ生成

多次元配列のサポート ドット記法で多次元配列へのアクセスが可能に:

  • gameBoard[0][1]のような直感的なアクセス
  • ネストされた配列構造の読み書き

高度なデバッグモード 開発効率を向上させるデバッグ機能:

  • デバッグログレベルの設定
  • エラー箇所の正確な特定

パスの自動作成 開発を加速する便利機能:

// 中間オブジェクトが自動的に作成される
NewJson.WriteString("deeply.nested.path.to.value", "data");
// 結果: {"deeply": {"nested": {"path": {"to": {"value": "data"}}}}}

Unreal Engine 対応バージョン

EasyJsonParser V2 のプラグインバージョンごとの対応状況は以下のとおりです。

プラグインバージョン対応UEバージョン
v2.0.0UE5.5 - 5.8

基本的な使い方

JSONの読み込み

文字列から読み込み

JSON文字列からJsonObjectを作成します。

// C++での使用例
FString JsonString = TEXT(R"({
    "player": {
        "name": "Hero",
        "level": 10,
        "stats": {
            "health": 100,
            "mana": 50
        }
    }
})");

bool bSuccess;
FString ErrorMessage;
FEasyJsonObjectV2 JsonObject = UEasyJsonParserV2BlueprintLibrary::LoadJsonFromString(JsonString, bSuccess, ErrorMessage);

if (bSuccess)
{
    // データの読み取り
    FString PlayerName = JsonObject.ReadString("player.name", "Unknown");
    int32 PlayerLevel = JsonObject.ReadInt("player.level", 1);
}

ファイルから読み込み

JSON文字列が保存されたファイルを読み込んでJsonObjectを作成します。

// ファイルから読み込み
FString FilePath = TEXT("Data/GameConfig.json");
bool bAbsolutePath = false;
bool bSuccess;
FString ErrorMessage;

FEasyJsonObjectV2 JsonObject = UEasyJsonParserV2BlueprintLibrary::LoadJsonFromFile(FilePath, bAbsolutePath, bSuccess, ErrorMessage);

if (!bSuccess)
{
    UE_LOG(LogTemp, Error, TEXT("Failed to load JSON: %s"), *ErrorMessage);
}

値の読み取り

基本型の読み取り

JSONの階層をドットで繋いだアクセス文字列を指定して直接値が取得できます。

// 整数値
int32 MaxPlayers = JsonObject.ReadInt("config.maxPlayers", 4);

// 浮動小数点数
float PlayerHealth = JsonObject.ReadFloat("player.health", 100.0f);

// 文字列
FString PlayerName = JsonObject.ReadString("player.name", "Unknown");

// ブール値
bool EnableSound = JsonObject.ReadBool("settings.enableSound", true);

オブジェクトの読み取り

JSONが多階層構造の場合に、途中のオブジェクトを取得するためのメソッドです。

// 単一のオブジェクト
FEasyJsonObjectV2 PlayerData = JsonObject.ReadObject("game.player");

// オブジェクトの配列
TArray<FEasyJsonObjectV2> Items = JsonObject.ReadObjects("inventory.items");

値の書き込み(V2の新機能)

新しいJSONの作成

空のJSONを生成して、そこに値をいれてJSONオブジェクトをつくることができます。

// 空のJSONオブジェクトを作成
FEasyJsonObjectV2 NewJson = UEasyJsonParserV2BlueprintLibrary::CreateEmptyJsonObject();

// 基本的な値の書き込み
NewJson.WriteInt("score", 1000);
NewJson.WriteFloat("time", 45.5f);
NewJson.WriteString("playerName", "Hero");
NewJson.WriteBool("isActive", true);

// オブジェクトの書き込み
FEasyJsonObjectV2 StatsObject = UEasyJsonParserV2BlueprintLibrary::CreateEmptyJsonObject();
StatsObject.WriteInt("level", 10);
StatsObject.WriteFloat("experience", 2500.0f);
NewJson.WriteObject("player.stats", StatsObject);
作成されるJson
{
    "score": 1000,
    "time": 45.5,
    "playerName": "Hero",
    "isActive": true,
    "player":
    {
        "stats":
        {
            "level": 10,
            "experience": 2500
        }
    }
}

配列への追加

JSONへの配列要素の追加も可能です。

// 配列に値を追加
NewJson.AddIntToArray("scores", 100);
NewJson.AddIntToArray("scores", 200);
NewJson.AddIntToArray("scores", 300);

NewJson.AddStringToArray("items", "Sword");
NewJson.AddStringToArray("items", "Shield");
NewJson.AddStringToArray("items", "Potion");

// オブジェクトを配列に追加
FEasyJsonObjectV2 ItemObject = UEasyJsonParserV2BlueprintLibrary::CreateEmptyJsonObject();
ItemObject.WriteString("name", "Magic Sword");
ItemObject.WriteInt("damage", 50);
NewJson.AddObjectToArray("equipment", ItemObject);
作成されるJson
{
    "scores": [ 100, 200, 300 ],
    "items": [
        "Sword",
        "Shield",
        "Potion"
    ],
    "equipment": [
        {
            "Name": "Magic Sword",
            "damage": 50
        }
    ]
}

JSONの保存

ファイルへの保存

作成したJSONオブジェクトはファイルに保存できます。

FString FilePath = TEXT("SaveData/PlayerSave.json");
bool bAbsolutePath = false;
bool bPrettyPrint = true;
bool bSuccess;
FString ErrorMessage;

UEasyJsonParserV2BlueprintLibrary::SaveJsonToFile(JsonObject, FilePath, bAbsolutePath, bPrettyPrint, bSuccess, ErrorMessage);

if (bSuccess)
{
    UE_LOG(LogTemp, Log, TEXT("Save successful"));
}
else
{
    UE_LOG(LogTemp, Error, TEXT("Save failed: %s"), *ErrorMessage);
}

文字列として取得

作成したJSONオブジェクトを文字列形式にすることもできます。

// コンパクトなJSON文字列
FString JsonString = UEasyJsonParserV2BlueprintLibrary::JsonToString(JsonObject, false);

// 整形されたJSON文字列
FString PrettyJsonString = UEasyJsonParserV2BlueprintLibrary::JsonToString(JsonObject, true);

デバッグ機能

デバッグモードをONにするとログにEasyJsonParserV2の動作ログが出力されるようになります。

なにか意図しない動作をする場合などに原因を探すのに便利です。

ただしパフォーマンス低下の原因になるので、リリース版では無効にすることをお勧めします。

// デバッグモードの有効化
UEasyJsonParserV2BlueprintLibrary::SetDebugMode(true);

// デバッグログレベルの設定
UEasyJsonParserV2BlueprintLibrary::SetDebugLogLevel(EEasyJsonParserV2DebugLogLevel::Detailed);

// 現在のログレベルを取得
EEasyJsonParserV2DebugLogLevel CurrentLevel = UEasyJsonParserV2BlueprintLibrary::GetDebugLogLevel();

ユーティリティ機能

その他便利機能を用意しています。

// JSONオブジェクトの有効性チェック
bool bIsValid = UEasyJsonParserV2BlueprintLibrary::IsJsonObjectValid(JsonObject);

// 2つのJSONオブジェクトの比較
bool bAreEqual = UEasyJsonParserV2BlueprintLibrary::AreJsonObjectsEqual(JsonObjectA, JsonObjectB);

全機能一覧

すべてのV2機能はBlueprint, C++両方で使用可能です。

BlueprintではEasyJsonParserV2カテゴリーから以下のノードが利用できます:

JSONの読み込み・作成

  • Load Json From File - ファイルからJSONを読み込み
  • Load Json From String - 文字列からJSONを読み込み
  • Create Empty Json Object - 空のJSONオブジェクトを作成

値の読み取り

  • Read Int - 整数値を読み取る
  • Read Float - 浮動小数点値を読み取る
  • Read String - 文字列を読み取る
  • Read Bool - ブール値を読み取る
  • Read Object - オブジェクトを読み取る
  • Read Objects - オブジェクト配列を読み取る

値の書き込み

  • Write Int - 整数値を書き込む
  • Write Float - 浮動小数点値を書き込む
  • Write String - 文字列を書き込む
  • Write Bool - ブール値を書き込む
  • Write Object - オブジェクトを書き込む

配列操作

  • Add Int To Array - 整数を配列に追加
  • Add Float To Array - 浮動小数点を配列に追加
  • Add String To Array - 文字列を配列に追加
  • Add Bool To Array - ブールを配列に追加
  • Add Object To Array - オブジェクトを配列に追加

保存・変換

  • Save Json To File - JSONをファイルに保存
  • Json To String - JSONを文字列に変換

ユーティリティ

  • Is Json Object Valid - JSONオブジェクトの有効性をチェック
  • Are Json Objects Equal - 2つのJSONオブジェクトを比較

デバッグ

  • Set Debug Mode - デバッグモードの有効/無効
  • Is Debug Mode - デバッグモードの状態を取得
  • Set Debug Log Level - デバッグログレベルを設定
  • Get Debug Log Level - 現在のログレベルを取得

アクセス文字列の指定方法

基本的な記法

キーをドットで繋ぐことで、目的の値へのパスを指定します。

シンプルなケース

{
  "prop": "abc"
}

アクセス文字列: prop

階層構造のオブジェクト

{
  "obj": {
    "prop": "abc"
  }
}

アクセス文字列: obj.prop

配列が含まれる場合

{
  "obj": [
    {"prop": "abc"},
    {"prop": "def"}
  ]
}

アクセス文字列:

  • 1番目の要素: obj[0].prop
  • 2番目の要素: obj[1].prop

多次元配列へのアクセス

{
  "matrix": [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
  ]
}

アクセスパターン:

  • matrix[0][0] → 1
  • matrix[1][2] → 6
  • matrix[2][1] → 8

パフォーマンス比較

機能V1V2
メモリ使用量高い(UObjectベース)低い(USTRUCTベース)
GC負荷高い最小限
JSON書き込み
デバッグモード基本的高度
Blueprintサポート完全完全

FAQ

よくある質問はこちらで確認できます。

レビューをお寄せください

このプラグインをご利用いただきありがとうございます。Epic Games Fabストアでのレビューは、今後の開発の大きな励みになります。ぜひご感想をお聞かせください!

Fabストアでレビューを書く