🎃
【Verse】JSONデータの入力と取得
前書き
VerseにはJSON文字列を解析・変換する以下の関数が存在します。
本記事では、VerseにおけるJSONの使い方について、入力方法と取得方法を書きます。執筆環境
フォートナイトエコシステム v36.30 (UE5.6.0)
JSONを入力する
JSONは、 "キー" : 値
のようにキーと値をペアで書きます。
Verseの変数・定数にはパスカルケースを使うことが推奨されています[1]が、JSONでの命名規則は使用言語によって異なるようです。キャメルケースやスネークケースが使用されることが多いらしく、今回はキャメルケース・スネークケースにしました。(以下のキーはいずれも1単語なので、どちらも同じです。)
以下はJSONの例です。
VerseでJSONをstring型(文字列)で定義し[2]、UEFN上のVerseデバイスの値、もしくはVerse内でJSONを設定します。
{
"name" : "Player1",
"level" : 15,
"score" : 1250.5,
"items" : [
"sword",
"shield",
"potion"
]
}
UEFNからJSONを設定する方法
Verseで@editable
をつけたstring型フィールドを作成し、UEFNに公開します。
UEFNからVerseデバイスにJSONを入力します。
json_smaple_device := class(creative_device):
# UEFNからJSONを設定する場合
@editable
JSONString:string = ""
JSONStringにJSONを貼り付ける
VerseからJSONを設定する方法
VerseでJSONを設定する場合、エスケープ処理が必要です。
ダブルクォーテーション("
)と中括弧({
, }
)の直前にはバックスラッシュ(\
)をつけます。
json_smaple_device := class(creative_device):
# 1行で書く場合
JSONString_2:string =
"\{\"name\":\"Player1\",\"level\":15,\"score\":1250.5,\"items\":[\"sword\",\"shield\",\"potion\"]\}"
# 複数行で書く場合
JSONString_3:string =
"\{" +
"\"name\" : \"Player1\"," +
"\"level\" : 15," +
"\"score\" : 1250.5," +
"\"items\" : [" +
"\"sword\"," +
"\"shield\"," +
"\"potion\"" +
"]" +
"\}"
JSONの値を取得する
JSONモジュールのVerseAPIの使用例
PrintJSONData(JSONString:string) : void =
if:
# JSON文字列を解析し、value型で取得
JSONValue:value = JSON.Parse[JSONString]
# キーと値のペアを取得(map型)
JSONObject:[string]value = JSONValue.AsObject[]
then:
# "name" の値をstring型で取得
if (NameValue:value = JSONObject["name"], Name := NameValue.AsString[]):
Print("プレイヤー名: {Name}")
# "level" の値をint型で取得
if (LevelValue:value = JSONObject["level"], Level := LevelValue.AsInt[]):
Print("レベル: {Level}")
# "score" の値をfloat型で取得
if (ScoreValue:value = JSONObject["score"], Score := ScoreValue.AsFloat[]):
Print("スコア: {Score}")
# "items" の値を配列で取得し、配列の各要素をstring型で取得
if (ItemsValue:value = JSONObject["items"], ItemsArray := ItemsValue.AsArray[]):
Print("アイテム一覧:")
for (ItemValue : ItemsArray):
if (ItemName := ItemValue.AsString[]):
Print("- {ItemName}")
自作関数PrintJSONData の呼び出し
json_smaple_device := class(creative_device):
JSONString_2:string =
"\{\"name\":\"Player1\",\"level\":15,\"score\":1250.5,\"items\":[\"sword\",\"shield\",\"potion\"]\}"
OnBegin<override>()<suspends>:void =
PrintJSONData(JSONString_2)
実行結果
LogVerse: : プレイヤー名: Player1
LogVerse: : レベル: 15
LogVerse: : スコア: 1250.500000
LogVerse: : アイテム一覧:
LogVerse: : - sword
LogVerse: : - shield
LogVerse: : - potion
-
Verseコードのスタイルガイド
https://dev.epicgames.com/documentation/ja-jp/fortnite/verse-code-style-guide-in-unreal-editor-for-fortnite#2-3-pascal-case-everything-else ↩︎ -
JSONファイルを操作する方法は現時点ではありません。 ↩︎
Discussion