開発したアプリなど一覧

Google Apps Script で JSON を扱う方法

記事内にアフィリエイトリンクを含む場合があります

Twitter などの各種 API を利用する際に良く使われるフォーマットに JSON がある。JavaScript Object Notation の略で各種プログラミング言語で利用可能だ。

もちろん Google Apps Script でも利用できる。

Google Apps Script で JSON を読み込む方法

GAS は JavaScript を元にしているからか、ライブラリなどインポートせずに JSON を利用することができる。

例として Wordpress Rest API を利用して投稿一覧を読み込む処理を記述してみた。

let url = 'http://loumo.jp/wp-json/wp/v2/posts' let response = UrlFetchApp.fetch(url) let content = response.getContentText("utf-8")

let json = JSON.parse(content) for (item of json) { console.log(item.link) console.log(item.title.rendered) }

実行すると記事の URL とタイトルをログに出力する。このように JSON.parse に JSON 文字列を渡すと JavaScript のオブジェクトとして扱えるようになる。

JSON 形式で取得したデータをスプレッドシートに保存する場合は以下のように SpreadsheetApp で対象のシートを取得し、setValue で値を書き込む。

let url = 'http://loumo.jp/wp-json/wp/v2/posts' let response = UrlFetchApp.fetch(url) let content = response.getContentText("utf-8")

let json = JSON.parse(content); for (item of json) { console.log(item.link) console.log(item.title.rendered) }

// insert data into spreadsheet const spreadsheet = SpreadsheetApp.getActiveSpreadsheet() const sheet = spreadsheet.getSheetByName(targetSheetName) row = 1; for (item of json) { sheet.getRange(`A${row}`).setValue(item.title.rendered) sheet.getRange(`B${row}`).setValue(item.link) row += 1 }

Google Apps Script で JSON を出力する方法

反対に JSON 形式で出力するには JSON.stringify を利用する。

const o = {a:1, b:2, c:3} console.log(JSON.stringify(o)) // {"a":1,"b":2,"c":3}

スプレッドシートの内容を JSON 形式にする場合は以下のような感じで getValues で取得した内容を JSON.stringify に渡してやるだけ。

const targetSheetName = 'sheet1' const spreadsheet = SpreadsheetApp.getActiveSpreadsheet() const sheet = spreadsheet.getSheetByName(targetSheetName) const sheetData = sheet.getDataRange().getValues() const ret = []

// 一行目はヘッダーとして処理する for (let i = 1; i < sheetData.length; i++) { row = {} for (let j = 0; j < sheetData[0].length; j++) { row[sheetData[0][j]] = sheetData[i][j] } ret.push(row) } console.log(JSON.stringify(ret))

ログに出力しただけだと値の型が分かりにくいが、JSON 形式になっているはずだ。

Sponsored Link

コメント

タイトルとURLをコピーしました