見出し画像

GAS × LastPassAPI スプレッドシートにLastPassに格納されている情報を書き込みたい その4 データの加工

前回


レスポンスを得ることはできました。
JSON.parse(response);でオブジェクトにしたデータは下記のような構造になっていました。

{
	"12345678": {
		"sharedfoldername": "hoge",
		"deleted": false,
		"score": 50,
		"users": [
			{
				"username": "hoge@hoge.com",
				"readonly": "0",
				"give": "1",
				"can_administer": "1",
				"superadmin": false,
				"deletedstatus": "0"
			},
			{
				"username": "fuga@hoge.com",
				"readonly": "0",
				"give": "1",
				"can_administer": "1",
				"superadmin": false,
				"deletedstatus": "0"
			},
			{
				"username": "hege@hoge.com",
				"readonly": "1",
				"give": "0",
				"can_administer": "1",
				"superadmin": false,
				"deletedstatus": "0"
			}
		]
	}

オブジェクトの中にオブジェクトがあり、さらに配列があり、さらにオブジェクトがある、という構造になっています。
これを整えて、スプレッドシートに書き出したい。
スプレッドシートに書き出すイメージは下図のような形です。

書き出しを考えるにあたっては、毎回APIを叩くのも手間だし、API提供側に負担をかけるのが嫌だし、何か間違いがあって本番環境に悪影響を及ぼすのも嫌なので、テスト用のオブジェクトを用意して検証していきます。
すなわち、下記のようなコードでテストしていきます。(あくまで例

グローバルにresponseを書いてもいいかもですね。その辺は適当に。

テストコードは下記の通り。テスト用オブジェクトにちょっと手を加えました。IDが複数ある方が現実的な実際的なものになるなと思って。

const response = {
  "12345678": {
    "sharedfoldername": "hoge",
    "deleted": false,
    "score": 50,
    "users": [
      {
        "username": "hoge@hoge.com",
        "readonly": "0",
        "give": "1",
        "can_administer": "1",
        "superadmin": false,
        "deletedstatus": "0"
      },
      {
        "username": "fuga@hoge.com",
        "readonly": "0",
        "give": "1",
        "can_administer": "1",
        "superadmin": false,
        "deletedstatus": "0"
      },
      {
        "username": "hege@hoge.com",
        "readonly": "1",
        "give": "0",
        "can_administer": "1",
        "superadmin": false,
        "deletedstatus": "0"
      }
    ]
  },

  "87654321": {
    "sharedfoldername": "hoge",
    "deleted": false,
    "score": 50,
    "users": [
      {
        "username": "hoge@hoge.com",
        "readonly": "0",
        "give": "1",
        "can_administer": "1",
        "superadmin": false,
        "deletedstatus": "0"
      }
    ]
  }
}

function test() {
  const sharedfolderIDs = Object.keys(response);
  console.log(sharedfolderIDs);
}

さて。オブジェクトの中身をどうにかしていきます。上記のコードの下3行に追加したコードを見ていきます。下記の部分です。

function test() {
  const sharedfolderIDs = Object.keys(response);
  console.log(sharedfolderIDs);
}

実行結果

Object.keys

リファレンス
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

オブジェクトはキーとプロパティの組み合わせでできているデータの塊でした。Object.keys は、オブジェクトのキーを取得して配列として返してくれるわけです。

Key:Property のペア構造になってる

ここでは、 const sharedfolderIDs = Object.keys(response); として、
このデータの塊のKeyにあたるフォルダID(数字8桁)の部分を取得することができました。

逆に、キーではなくプロパティを取得するには、
Object.values を用います。下図はその例です。

ここで、users: [ [Object], [Object], [Object] ] } として、中身が取れてない??と焦りました。が、これは、中身が多い時に省略されているだけらしいです。

では、この調子で、sharedfpldernameやdeletedなどのpropertyを取得いきたいですね。しかし、sharedfpldernameやdeletedは、フォルダID(数字8桁)のさらに1階層下にあるオブジェクトです。どうやって取得するか?

続きは次回で。

続き↓


#GAS
#API
#パスワード管理
#json
#httpリクエスト
#LastPass
#配列
#オブジェクト


いただいたサポートで、書籍代や勉強費用にしたり、美味しいもの食べたりします!