JsonObjectStringToUStruct 関数の原理分析
この機能は、Json 文字列を UStruct に解析して保存することです。
-
FJsonObjectの初期化、TJsonReaderの初期化
-
TJsonReader(Json文字列)をFJsonObjectにデシリアライズ/解析する
データはブロックごとに解析されます。「{」または「[」が出現するたびに、対応するキーがスタックにプッシュされ、対応するキーが保存されます。各文字列/数値/ブール/Null 型の値は直接保存されます。 '}' が出現したとき、または ']' がスタックから飛び出し、最終的に StackState をノードとして持つマルチツリーを形成します。最後に、最も外側の中括弧の有無に応じて、FJsonValueObject または FJsonValueArray が返されます。
-
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 の各キーと値のペアを蓄積します。値は許可されている任意の型です。
概要と注意事項
-
Json 解析メソッドを使用するには、「JSONUTILITIES」モジュールと「JSON」モジュールを .cs ファイルに追加する必要があります。
-
すべての Json 数値型データは二重解析を使用して解析されるため、浮動小数点の精度の問題に注意する必要があります。
-
解析されたパラメーターの型は、必ずしも Json データ型に対応するとは限りません。3 番目の段落を参照してください。
-
反映できる UStruct メンバーのみが Json 解析に参加できます。それ以外の場合、メンバーは無視されます。
-
Json には存在するが UStruct には存在しないパラメーター、または UStruct には存在するが Json には存在しないパラメーターは無視されます。
-
Json 解析は多くのパフォーマンスを消費する可能性があります (テキストが巨大になる可能性があります)。呼び出しはできるだけ少なくし、できれば非同期スレッドに配置してください。解析に参加するために UStruct に不要な Json パラメータを書き込まないでください。
-
Json を複数回解析する必要がある場合は、Json を UStruct に直接変換せず、キャッシュ用に FJsonObject に変換してから、FJsonObject から必要な UStruct に変換してください。
著者: 張興、電子メール: [email protected]