스프레드시트에서 json 만들기

하고 싶은 일



스프레드 시트에서 json을 만들고 싶습니다.
제목을 키로 만드는 패턴과{id:001, name=aaa, flg=true},{id:002, name=bbb, flg=false}id를 key로 하고 그 안에 제목을 key로 하는 패턴을 이번에는 만든다.{001:{name=aaa, flg=true},002:{name=bbb, flg=false}}

스프레드시트에서 gas를 작성하려면



아래 그림과 같이 스프레드 시트를 준비하고 첫 번째 줄에서 찾은 다음 두 번째 줄 이후에 데이터를 적절하게 입력합니다.
그런 다음 도구> 스크립트 편집기를 클릭하면 별도의 창에서 apps script의 웹 편집기가 나타납니다.
여기에서 새로운 gas 파일과 html 파일을 추가합니다.



gas 및 html 준비



gas 편집기를 열면 이미 "코드 .gs"의 gas 파일이 존재합니다.


코드 .gs 파일을 원하는 이름으로 변환하고 다음 소스 코드를 붙여 넣습니다.
//ダウンロードダイヤログ表示
function toJSON() {
  /* 実行結果イメージ
    [
      {flg=true, name=google, id=A001, url=https://www.google.com/},
      {flg=true, name=yahoo, id=A002, url=https://www.yahoo.co.jp/},
      {flg=false, name=aaaa, id=B001, url=https://www.aaaaaa}
    ]
   */ 

  //ダイヤログテンプレート読み込み
  var dl_html = HtmlService.createTemplateFromFile("dl").evaluate();

  //ダイヤログ表示
  SpreadsheetApp.getUi().showModalDialog(dl_html, "JSONファイルをダウンロード");
}

//データ取得
function getData() {
  //データ取得するシート(現在開いているシートを指定)
  var sheet = SpreadsheetApp.getActiveSheet();

  //行(横軸)と列(縦軸)の最大数を取得
  var maxRow = sheet.getLastRow();
  var maxColumn = sheet.getLastColumn();

  //JSON用のkey
  var keys = [];

  //データ格納配列
  var data = [];

  // ★ここから
  //1行目のkeyの名前取得 keyの行を変更したい場合はxと引数を変更
  //JSON用のラベルは1行目で指定しているため【getRange】の第1引数は【1】
  for (var x = 1; x <= maxColumn; x++) {
    keys.push(sheet.getRange(1, x).getValue());
  }

  //データの取得
  //実際のデータが2行目からなので【y = 2】から開始
  for (var y = 2; y <= maxRow; y++) {
    // var json_shop_id = {};
    var json = {};

    for (var x = 1; x <= maxColumn; x++) {
      json[keys[x-1]] = sheet.getRange(y, x).getValue();
    }
    //データ格納
    data.push(json);
    Logger.log(data);
  }

  //整形してテキストにします
  return JSON.stringify(data, null, '\t'); // ★ここまで
}


//スプレッドシート読み込み時に実行
function onOpen() {
  //メニューバーにJSON出力用メニューを追加
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "JSONで出力",
    functionName : "toJSON"
  }];
  spreadsheet.addMenu("JSON", entries);
};

그런 다음 다운로드를위한 화면을 만들기 위해 새로 HTML 파일을 준비합니다.
html 파일의 이름은 무엇이든 좋지만 위의 12 행에서 dl 파일을 읽고 있기 때문에 이번에는 dl.html을 만들고 다음 소스를 붙여 넣습니다.
<!DOCTYPE html>
<html>
<head>
    <base target="_top">
    <script type='text/javascript'>
        //ダウンロード実行
        function handleDownload() {
            //JSONデータの取得
            var content = <?= getData(); ?>;
            //ダウンロード用URL生成
            var blob = new Blob([content], { "type": "application/json" });
            document.getElementById("download").href = window.URL.createObjectURL(blob);
        }
    </script>
</head>
<body>
    <!-- JSONダウンロードボタン:json名は適宜設定してください-->
    <a id="download" href="#" download="download_file.json" onclick="handleDownload()">ダウンロード</a>
</body>
</html>

파일 실행



위의 파일이 준비되면 스프레드 시트로 돌아가서 실행하십시오.
JSON>JSON로 출력으로부터 실행한다 ※첫회 실행은, 인증이 필요하게 되므로 허가한다.





다운로드에서 json을 다운로드하면,
[
    {
        "id": "A001",
        "name": "google",
        "flg": false,
        "url": "https://www.google.com/"
    },
    {
        "id": "A002",
        "name": "yahoo",
        "flg": true,
        "url": "https://www.yahoo.co.jp/"
    },
    {
        "id": "B001",
        "name": "aaaa",
        "flg": false,
        "url": "https://www.aaaa.co.jp/"
    }
]

json 파일을 다운로드할 수 있다.

ID를 키로 만드는 패턴



gas에 붙인 소스의 「★여기에서」「★여기까지」를 아래와 같이 수정
// ★ここから
  //1行目のkeyの名前取得 keyの行を変更したい場合はxと引数を変更
  //JSON用のラベルは2行目で指定しているため【getRange】の第1引数は【1】
  for (var x = 1; x <= maxColumn; x++) {
    keys.push(sheet.getRange(1, x).getValue());
  }

  //データの取得 
  //実際のデータが2行目からなので【y = 2】から開始
  for (var y = 2; y <= maxRow; y++) {
    var json = {};

    for (var x = 2; x <= maxColumn; x++) {
      json[keys[x-1]] = sheet.getRange(y, x).getValue();
    }
    //データ格納
    var id = sheet.getRange(y, 1).getValue();
    data[id] = json;

  }
  Logger.log(data);
  //整形してテキストにします
  return JSON.stringify(data, null, '\t');  // ★ここまで

그러면 id를 key로 한 json을 만들 수 있습니다.
/* jsonの形
{
    "A001": {
        "name": "google",
        "flg": true,
        "url": "https://www.google.com/"
    },
    "A002": {
        "name": "yahoo",
        "flg": true,
        "url": "https://www.yahoo.co.jp/"
    },
    "B001": {
        "name": "aaa",
        "flg": false,
        "url": "https://www.aaaaaa"
    }
}
*/ 

소스 코드는 다음 git에 있습니다.
htps : // 기주 b. 코 m / 미나미 - 373 / 오테 r_ 코데
참고
htps : // / wk. jp/bぉg/sp레아 d시에 t2j

좋은 웹페이지 즐겨찾기