UE4 Json の解析方法と原則

JsonObjectStringToUStruct 関数の原理分析

この機能は、Json 文字列を UStruct に解析して保存することです。

  1. FJsonObjectの初期化、TJsonReaderの初期化

  2. TJsonReader(Json文字列)をFJsonObjectにデシリアライズ/解析する

    データはブロックごとに解析されます。「{」または「[」が出現するたびに、対応するキーがスタックにプッシュされ、対応するキーが保存されます。各文字列/数値/ブール/Null 型の値は直接保存されます。 '}' が出現したとき、または ']' がスタックから飛び出し、最終的に StackState をノードとして持つマルチツリーを形成します。最後に、最も外側の中括弧の有無に応じて、FJsonValueObject または FJsonValueArray が返されます。

  3. FJsonObject を UStruct に解析して保存します

    UStruct の各リフレクティブ パラメータを再帰的に走査して、対応する Key が FJsonObject に存在するかどうかを確認し、存在する場合は型に従って直接割り当て、存在しない場合はスキップします。

UStructToJsonObjectString 原則

UStruct を Json 形式の文字列にシリアル化します。原理は、以前の機能の逆のプロセスであり、拡張されなくなります。

Json によって UStruct に解析できる型。構造体のメンバーは UE4 リフレクション型である必要があります。

FEnumProperty: 列挙型。必要な値は列挙パラメータに対応する文字列名です。

FNumericProperty: double/int64 型。値が数値パラメーターの場合、double 解析が使用されます。値が文字列の場合、int64 解析が使用されます。最後に、解析されたパラメーターは受信型に保存されます (long 整数は double を使用して解析されます) 、精度が発生する可能性があります。問題、この時点では文字列を渡す必要があります)

FBoolProperty: bool 型、値は true/True/flase/Flase

FStrProperty: FString 型、値は文字列型です (エスケープ文字に注意してください)

FArrayProperty: TArray タイプ、値は配列です

FMapProperty: TMap タイプ、値はオブジェクトですが、オブジェクト内の各メンバーのタイプは TMap と同じである必要があり、キーは文字列、値は対応するデータ構造です

FSetProperty: TSet タイプ。値は配列です。値内の各メンバーは同じタイプである必要があります。

FTextProperty: FText タイプ、値は文字列またはオブジェクトです。オブジェクトの場合、オブジェクトは FText 用に特別に設定された特別なオブジェクトである必要があります。

FStructProperty: FStruct 型、値は Object または string です。値が Object の場合、通常の処理に従って再帰的に解析されます。値が文字列の場合、UE4 の特別な解析パスに入ります。解析されたパラメータの型が FDataTime/FColor/FLinearColor 型の場合、特定の形式の文字列を解析することで取得できます。

FObjectProperty: UObject 型、まだ理解できません!

Jsonの解析処理で使用される構造体・列挙型の説明

EJson: サポートされている Json 構文タイプ (すべてサポートされている)、StackState の現在対応する Json 構造

TJsonReader: Json 文字列の保存と読み取りに使用されます

FJsonObject: 中括弧内の各キーと値のペアをツリー構造として保存するために使用されます。

EJsonNotation: 現在の文字列解析のステータスをマークします。

StackState: Json の各キーと値のペアを蓄積します。値は許可​​されている任意の型です。

概要と注意事項

  1. Json 解析メソッドを使用するには、「JSONUTILITIES」モジュールと「JSON」モジュールを .cs ファイルに追加する必要があります。

  1. すべての Json 数値型データは二重解析を使用して解析されるため、浮動小数点の精度の問題に注意する必要があります。

  2. 解析されたパラメーターの型は、必ずしも Json データ型に対応するとは限りません。3 番目の段落を参照してください。

  3. 反映できる UStruct メンバーのみが Json 解析に参加できます。それ以外の場合、メンバーは無視されます。

  4. Json には存在するが UStruct には存在しないパラメーター、または UStruct には存在するが Json には存在しないパラメーターは無視されます。

  5. Json 解析は多くのパフォーマンスを消費する可能性があります (テキストが巨大になる可能性があります)。呼び出しはできるだけ少なくし、できれば非同期スレッドに配置してください。解析に参加するために UStruct に不要な Json パラメータを書き込まないでください。

  6. Json を複数回解析する必要がある場合は、Json を UStruct に直接変換せず、キャッシュ用に FJsonObject に変換してから、FJsonObject から必要な UStruct に変換してください。

著者: 張興、電子メール: [email protected]

おすすめ

転載: blog.csdn.net/m0_59723700/article/details/128696960