キーと値のペアの取得

KiiObject からキーと値のペアを取得するには、KiiObject クラスの get() のメソッドを呼び出します。

get() メソッドの引数には、取得するキー名を指定します。JSON ドキュメントから、指定した第 1 階層のキーの値が読み込まれます。取得した値は、JSON ドキュメントの指定したキーに応じたデータ型で取得できます。

以下に JSON ドキュメントのサンプルと、その JSON ドキュメントから値を取得するためのサンプルコードを示します。サンプルコードのコメントは、取得できた値を表します。KiiObject の取得処理まで含む完全なコードは、下記の 基本データ型の取得 を参照してください。

{
  "score": 987,
  "premiumUser": false,
  "mode": "easy"
}
var score = object.get("score"); // score=987
var mode = object.get("mode"); // mode="easy"
var premiumUser = object.get("premiumUser"); // premiumUser=false

第 2 階層より深い位置の値を読み込みたい場合は、第 1 階層を JSON オブジェクトとして取得してください。

サポートするデータ型

get() メソッドを実行した結果のバリエーションを、以下の表に示します。「読み込み元 JSON の例」に示す JSON ドキュメントを「呼び出し例」で取得すると、「取得結果」の値を取得できます。

JavaScript では実行時に型が決まるため、同じ get() メソッドを使ってすべてのデータ型を扱うことができます。ただし、位置情報(KiiGeoPoint)を扱う場合に get() メソッドを使うと内部データが object として取得されるため、専用メソッド getGeoPoint() を使って取得します。

値の型 読み込み元 JSON の例 呼び出し例 取得結果
string "data":"123" get("data"); "123"
number "data":123 get("data"); 123
boolean "data":true get("data"); 123L
KiiGeoPoint "data":{
"_type": "point",
"lat": 35.658603,
"lon": 139.745433
}
getGeoPoint("data"); getGeoPoint("data", geoPoint);
配列 "data":[1,2,3] get("data"); [1,2,3]
object "data":{"a":"b"} get("data"); {"a":"b"}

JavaScript では Android にある、バイト配列を BASE64 にして取得する機能はサポートしていません。必要な場合は文字列で取得後に、アプリ側で BASE64 デコードを行います。

基本データ型の取得

KiiObject よりキーと値のペアを取得するには get() メソッドを実行します。詳細については JSDoc を参照してください。

以下に、KiiObject よりキーと値のペアを取得するサンプルを挙げます。

  • // Instantiate a KiiObject.
    var object = KiiObject.objectWithURI("Set the URI of an existing KiiObject here");
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    object.refresh({
      success: function(theObject) {
        // Get key-value pairs.
        var stringData = object.get("stringValue");
        var intData = object.get("intValue");
        var longData = object.get("longValue");
        var doubleData = object.get("doubleValue");
        var booleanData = object.get("booleanValue");
      },
      failure: function(theObject, errorString) {
        // Handle the error.
      }
    });
  • // Instantiate a KiiObject.
    var object = KiiObject.objectWithURI("Set the URI of an existing KiiObject here");
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    object.refresh().then(
      function(theObject) {
        // Get key-value pairs.
        var stringData = object.get("stringValue");
        var intData = object.get("intValue");
        var longData = object.get("longValue");
        var doubleData = object.get("doubleValue");
        var booleanData = object.get("booleanValue");
      }
    ).catch(
      function(error) {
        var theObject = error.target;
        var errorString = error.message;
        // Handle the error.
      }
    );

インスタンス作成後、refresh() メソッドを呼ぶのを忘れないようにしてください。KiiObject のインスタンスを生成しただけでは、KiiObject の中身は最新のものになりません。

キー一覧の取得

KiiObject にセットされているキーの一覧は、次の例のように getKeys() メソッドを使って確認できます。

  • // Instantiate a KiiObject.
    var object = KiiObject.objectWithURI("Set the URI of an existing KiiObject here");
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    object.refresh({
      success: function(theObject) {
        // Get a list of keys.
        var keys = object.getKeys();
    
        // Do something with the list.
        for (var i = 0; i < keys.length; i++) {
          console.log(keys[i] + "=" + object.get(keys[i]));
          // Do something with each key.
        }
      },
      failure: function(theObject, errorString) {
        // Handle the error.
      }
    });
  • // Instantiate a KiiObject.
    var object = KiiObject.objectWithURI("Set the URI of an existing KiiObject here");
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    object.refresh().then(
      function(theObject) {
        // Get a list of keys.
        var keys = object.getKeys();
    
        // Do something with the list.
        for (var i = 0; i < keys.length; i++) {
          console.log(keys[i] + "=" + object.get(keys[i]));
          // Do something with each key.
        }
      }
    ).catch(
      function(error) {
        var theObject = error.target;
        var errorString = error.message;
        // Handle the error.
      }
    );

getKeys() メソッドでは、プログラムから設定したキーの一覧のみを取得できます。Kii Cloud SDK for JavaScript では、_version や _id などの所定キーは読み込めません。所定キーについて詳しくは、所定キー をご覧ください。

空のフィールドの読み込み

キーと値のペアの取得の際は、存在しないキーの値を読み込んだときと JSON の null を読み込んだときで挙動が違います。

たとえば、以下のような JSON が書き込まれているオブジェクトから値を読み込むものとします。

{
  "key1": null,
  "key2": ""
}

各メソッドでの取得結果は以下のとおりです。

  • object.get("key1") は null を返します。
  • object.get("key2") は空文字列を返します。
  • object.get("key3") は Undefined を返します。

JSON とデータ型との対応の詳細は、取得時のデータ変換 をご覧ください。

作成/更新時間の取得

Kii Cloud は、KiiObject の作成時間と最終更新時間を自動的にセットします(いずれも UNIX 時間、ミリ秒)。これらの情報は、それぞれ KiiObject オブジェクトの getCreated() メソッドと getModified() メソッドを実行することで取得可能です。

なお、時間は UTC(協定世界時)で保存されているため、必要に応じて変換を行ってください。

位置情報(GeoPoint)の取得

KiiObject にセットした位置情報を抽出するには、まず KiiObject のキーを指定して getGeoPoint() メソッドを実行し、KiiGeoPoint オブジェクトを取得します。この後、getLatitude() メソッドおよび getLongitude() メソッドを実行して、それぞれ緯度、経度の取得を行います。

// Get GeoPoints from the "location1" and "location2" keys.
var objLoc1 = object.getGeoPoint("location1");
var objLoc2 = object.getGeoPoint("location2");

// Get the latitude and longitude data.
var lat1 = objLoc1.getLatitude();
var lon1 = objLoc1.getLongitude();
var lat2 = objLoc2.getLatitude();
var lon2 = objLoc2.getLongitude();

複雑なデータ型の取得

JavaScript では、KiiObject にセットした JSON オブジェクトや JSON オブジェクトの配列などを型に関係なく取得できます。

複雑なデータ型の設定 のサンプルコードでセットした値を取得する例を以下に挙げます。

// Get a value of a JSON object.
var jsonObject = object.get("myObject");
console.log(JSON.stringify(jsonObject));

// Get a value of a JSON array.
var jsonArray = object.get("myArray");
console.log(JSON.stringify(jsonArray));