コンテンツにスキップ

HeliScriptでJsonを読み込む

概要

JsValとプロパティを使うことで、格納したJsonファイル情報を読み込むことができます。

このページではHeliScriptでのJsonファイルの読み込み方について説明します。

検証環境

SDKバージョン : 12.3.4
OS : Windows 10
Unity : 2019.4.31.f1

ブラウザ : Google Chrome


事前知識:JsValクラスって?

HeliScriptでは、JsValクラスが用意されています。
これは、JavaScriptのデータを読み込むためのクラスです。
連想配列の形式を使用することが可能です。
詳しくはJsValのページ をご覧ください。

JsVal shopInfo;

のように定義することでJsValクラスの変数を作成することができます。


①JsValクラス変数にデータを入れる

JsValクラス変数にデータを入れるには、コールバック関数を使用します。
今回はheliport.v3.api.worlds.getWorldList()を利用し取得したワールドリストのデータをJsValを利用し取得、それを反映します。

予め、

delegate void fJsValCallback(JsVal);

を定義しておき、

    public void _FetchWorldListCallback(JsVal val)
    {

    }

    //この関数を発火したタイミングでJsVal変数にデータが入る
    heliport.v3.api.worlds.getWorldList(_FetchWorldListCallback, 6, 0, "myvket", "", "", "official");

関数を定義します。

ここまで用意出来たら、関数を発火することでコールバック関数内にてJsValクラス変数valにデータが入った状態で使用することが出来ます。


②JsValから必要な情報を取り出す

今回使用するデータは、

data {  
world\_portals \[  
id : int型  
name : string型  
visit\_count : int型  
ingame\_url : string型  
thumbnail : string型  
\]  
}

という階層構造を持っています。
(world_portalsは、id, name, visit_count, ingame_url, thumbnailの5要素がセットになっています)

JsValのデータの取り出しにはGetProperty()GetProperty().At()の2種類を使用します。

要素はGetProperty()、連想配列はGetProperty().At()でキーと配列番号を指定して対応するキーにアクセスすることが可能です。
末端まで辿り着いたら、int型であればGetNum()、string型であればGetStr()で値を取得することが可能です。

したがって、1番目のid, name, visit_count, ingame_url, thumbnailを取得するためには、下記のようなコードを書く必要があります。

_id = val.GetProperty("data").GetProperty("world_portals").At(0).GetProperty("id").GetNum(); _name = val.GetProperty("data").GetProperty("world_portals").At(0).GetProperty("name").GetStr(); _visit_count = val.GetProperty("data").GetProperty("world_portals").At(0).GetProperty("visit_count").GetNum(); _ingame_url = val.GetProperty("data").GetProperty("world_portals").At(0).GetProperty("ingame_url").GetStr(); _thumb_url = val.GetProperty("data").GetProperty("world_portals").At(0).GetProperty("thumbnail").GetStr();

取り出したデータはそれぞれint型やstring型として使うことが出来るため、
hsSystemWriteLineに反映したり、計算に使ったりし、取得結果をワールドに反映することが可能です。


参考ページ

ブローカーAPIについて :ブローカーAPIでもJsValを使ったデータ取得を行います。