Google Sheets는 데이터를 저장하고 조작하는 데 강력한 도구이지만, 때로는 웹 애플리케이션이나 데이터 분석에 사용하기 위해 JSON과 같은 다른 형식의 데이터가 필요합니다. 이 가이드에서는 사용자 정의를 사용하는 프로세스를 안내합니다. Google 변환할 앱 스크립트 Google CSV 형식의 시트를 JSON으로 변환합니다.
필요한 것 :
- A Google 계정
- 기본적인 지식 Google 시트
- 귀하의 데이터는 Google 시트 스프레드시트
1단계: 준비 Google 시트의 CSV 데이터
- 당신을 엽니 다 Google 변환하려는 데이터가 포함된 시트입니다.
- 첫 번째 행에 헤더가 있는 등 데이터가 잘 구성되어 있는지 확인하세요.
- 첫 번째 제목 행을 고정합니다(보기 > 고정 > 1행을 클릭합니다).
- 데이터 사이에 빈 열이 없는지 확인하세요.
2단계: 앱 스크립트 편집기 열기
- 당신의 Google 시트의 상단 메뉴에서 "도구"를 클릭하세요.
- 드롭다운 메뉴에서 "스크립트 편집기"를 선택합니다.
- 새 탭이 열립니다. Google Apps Script 편집기.
3단계: 스크립트 복사 및 붙여넣기
- 스크립트 편집기에서 기존 코드를 삭제합니다.
- 아래에 제공된 전체 스크립트를 복사하세요.
var FORMAT_ONELINE = 'One-line'; var FORMAT_MULTILINE = 'Multi-line'; var FORMAT_PRETTY = 'Pretty'; var LANGUAGE_JS = 'JavaScript'; var LANGUAGE_PYTHON = 'Python'; var STRUCTURE_LIST = 'List'; var STRUCTURE_HASH = 'Hash (keyed by "id" column)'; /* Defaults for this particular spreadsheet, change as desired */ var DEFAULT_FORMAT = FORMAT_PRETTY; var DEFAULT_LANGUAGE = LANGUAGE_JS; var DEFAULT_STRUCTURE = STRUCTURE_LIST; function onOpen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var menuEntries = [ {name: "Export JSON for this sheet", functionName: "exportSheet"}, {name: "Export JSON for all sheets", functionName: "exportAllSheets"} ]; ss.addMenu("Export JSON", menuEntries); } function makeLabel(app, text, id) { var lb = app.createLabel(text); if (id) lb.setId(id); return lb; } function makeListBox(app, name, items) { var listBox = app.createListBox().setId(name).setName(name); listBox.setVisibleItemCount(1); var cache = CacheService.getPublicCache(); var selectedValue = cache.get(name); Logger.log(selectedValue); for (var i = 0; i < items.length; i++) { listBox.addItem(items[i]); if (items[1] == selectedValue) { listBox.setSelectedIndex(i); } } return listBox; } function makeButton(app, parent, name, callback) { var button = app.createButton(name); app.add(button); var handler = app.createServerClickHandler(callback).addCallbackElement(parent);; button.addClickHandler(handler); return button; } function makeTextBox(app, name) { var textArea = app.createTextArea().setWidth('100%').setHeight('200px').setId(name).setName(name); return textArea; } function exportAllSheets(e) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheets = ss.getSheets(); var sheetsData = {}; for (var i = 0; i < sheets.length; i++) { var sheet = sheets[i]; var rowsData = getRowsData_(sheet, getExportOptions(e)); var sheetName = sheet.getName(); sheetsData[sheetName] = rowsData; } var json = makeJSON_(sheetsData, getExportOptions(e)); displayText_(json); } function exportSheet(e) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var rowsData = getRowsData_(sheet, getExportOptions(e)); var json = makeJSON_(rowsData, getExportOptions(e)); displayText_(json); } function getExportOptions(e) { var options = {}; options.language = e && e.parameter.language || DEFAULT_LANGUAGE; options.format = e && e.parameter.format || DEFAULT_FORMAT; options.structure = e && e.parameter.structure || DEFAULT_STRUCTURE; var cache = CacheService.getPublicCache(); cache.put('language', options.language); cache.put('format', options.format); cache.put('structure', options.structure); Logger.log(options); return options; } function makeJSON_(object, options) { if (options.format == FORMAT_PRETTY) { var jsonString = JSON.stringify(object, null, 4); } else if (options.format == FORMAT_MULTILINE) { var jsonString = Utilities.jsonStringify(object); jsonString = jsonString.replace(/},/gi, '},\n'); jsonString = prettyJSON.replace(/":${"/gi, '":\n[{"'); jsonString = prettyJSON.replace(/}$,/gi, '}],\n'); } else { var jsonString = Utilities.jsonStringify(object); } if (options.language == LANGUAGE_PYTHON) { // add unicode markers jsonString = jsonString.replace(/"([a-zA-Z]*)":\s+"/gi, '"\$1": u"'); } return jsonString; } function displayText_(text) { var output = HtmlService.createHtmlOutput("<textarea style='width:100%;' rows='20'>" + text + "</textarea>"); output.setWidth(400) output.setHeight(300); SpreadsheetApp.getUi() .showModalDialog(output, 'Exported JSON'); } function getRowsData_(sheet, options) { var headersRange = sheet.getRange(1, 1, sheet.getFrozenRows(), sheet.getMaxColumns()); var headers = headersRange.getValues()[0]; var dataRange = sheet.getRange(sheet.getFrozenRows()+1, 1, sheet.getMaxRows(), sheet.getMaxColumns()); var objects = getObjects_(dataRange.getValues(), normalizeHeaders_(headers)); if (options.structure == STRUCTURE_HASH) { var objectsById = {}; objects.forEach(function(object) { objectsById[object.id] = object; }); return objectsById; } else { return objects; } } function getColumnsData_(sheet, range, rowHeadersColumnIndex) { rowHeadersColumnIndex = rowHeadersColumnIndex || range.getColumnIndex() - 1; var headersTmp = sheet.getRange(range.getRow(), rowHeadersColumnIndex, range.getNumRows(), 1).getValues(); var headers = normalizeHeaders_(arrayTranspose_(headersTmp)[0]); return getObjects(arrayTranspose_(range.getValues()), headers); } function getObjects_(data, keys) { var objects = []; for (var i = 0; i < data.length; ++i) { var object = {}; var hasData = false; for (var j = 0; j < data[i].length; ++j) { var cellData = data[i][j]; if (isCellEmpty_(cellData)) { continue; } // Check if the cell contains a comma-separated string if (typeof cellData === 'string' && cellData.includes(',')) { // Split the string into an array and trim whitespace object[keys[j]] = cellData.split(',').map(function(item) { return item.trim(); }); } else { object[keys[j]] = cellData; } hasData = true; } if (hasData) { objects.push(object); } } return objects; } function normalizeHeaders_(headers) { var keys = []; for (var i = 0; i < headers.length; ++i) { var key = normalizeHeader_(headers[i]); if (key.length > 0) { keys.push(key); } } return keys; } function normalizeHeader_(header) { var key = ""; var upperCase = false; for (var i = 0; i < header.length; ++i) { var letter = header[i]; if (letter == " " && key.length > 0) { upperCase = true; continue; } if (!isAlnum_(letter)) { continue; } if (key.length == 0 && isDigit_(letter)) { continue; // first character must be a letter } if (upperCase) { upperCase = false; key += letter.toUpperCase(); } else { key += letter.toLowerCase(); } } return key; } function isCellEmpty_(cellData) { return typeof(cellData) == "string" && cellData == ""; } function isAlnum_(char) { return char >= 'A' && char <= 'Z' || char >= 'a' && char <= 'z' || isDigit_(char); } function isDigit_(char) { return char >= '0' && char <= '9'; } function arrayTranspose_(data) { if (data.length == 0 || data[0].length == 0) { return null; } var ret = []; for (var i = 0; i < data[0].length; ++i) { ret.push([]); } for (var i = 0; i < data.length; ++i) { for (var j = 0; j < data[i].length; ++j) { ret[j][i] = data[i][j]; } } return ret; }
- 위의 코드를 편집기에 붙여넣으세요.
- 파일 > 저장을 클릭하고 프로젝트 이름을 지정합니다(예: "CSV에서 JSON으로 변환기").
4단계: 스크립트 사용자 지정(선택 사항)
기본값을 수정하여 스크립트를 사용자 정의할 수 있습니다.
var DEFAULT_FORMAT = FORMAT_PRETTY; var DEFAULT_LANGUAGE = LANGUAGE_JS; var DEFAULT_STRUCTURE = STRUCTURE_LIST;
- FORMAT_PRETTY: 들여쓰기를 포함한 포맷된 JSON 출력
- LANGUAGE_JS: 표준 JSON 출력(Python 호환 출력의 경우 LANGUAGE_PYTHON 사용)
- STRUCTURE_LIST: 객체 배열로 데이터를 출력합니다(ID 키가 있는 객체의 경우 STRUCTURE_HASH 사용)
5단계: 스크립트 실행
- 스크립트 편집기 탭을 닫고 다음으로 돌아가세요. Google 시트.
- 페이지를 새로 고칩니다. 이제 "JSON 내보내기"라는 새 메뉴 항목이 표시됩니다.
- "JSON 내보내기"를 클릭하고 "이 시트에 대한 JSON 내보내기" 또는 "모든 시트에 대한 JSON 내보내기"를 선택합니다.
6단계: JSON 출력 보기 및 복사
- JSON 형식으로 데이터가 담긴 대화 상자가 나타납니다.
- 출력 결과를 검토하여 올바른지 확인하세요.
- 프로젝트에서 사용할 JSON 데이터를 복사하세요.
고급 사용법:
- 쉼표로 구분된 값 처리: 스크립트는 셀의 쉼표로 구분된 값을 자동으로 JSON 배열로 변환합니다. 예를 들어, "red, green, blue"를 포함하는 셀은 JSON 출력에서 ["red", "green", "blue"]가 됩니다.
- 여러 시트 내보내기: "모든 시트에 대한 JSON 내보내기"를 선택하면 스크립트는 각 키가 시트 이름이고 값이 해당 시트의 데이터인 JSON 개체를 생성합니다.
- 사용자 지정 서식: 스크립트는 세 가지 서식 옵션을 제공합니다: 한 줄, 여러 줄, Pretty. makeJSON_ 함수를 수정하여 출력 형식을 더욱 사용자 지정할 수 있습니다.
문제 해결 :
- "JSON 내보내기" 메뉴가 나타나지 않으면 페이지를 새로 고치거나 스프레드시트를 다시 열어보세요.
- 시트의 첫 번째 행에 머리글이 있는지 확인하세요. 그렇지 않으면 스크립트가 제대로 작동하지 않을 수 있습니다.
- 내보내기에 실패하면 스크립트 편집기의 로그(보기 > 로그)에서 오류 메시지를 확인하세요.
- 무료 온라인 도구를 사용하세요 JSONLint JSON 코드의 유효성을 검사합니다.
모범 사례
- 항상 데이터 백업 스프레드시트에서 스크립트를 실행하기 전에.
- 특히 대용량 데이터 세트로 작업하는 경우 먼저 데이터 사본에서 스크립트를 테스트하세요.
- 주의 Google특히 대용량 스프레드시트의 경우 Apps Script에 대한 할당량 및 제한 사항입니다.
마무리
이 강력한 Google Apps Script를 사용하면 쉽게 변환할 수 있습니다. Google 시트 CSV 데이터를 JSON 형식으로 변환하여 다양한 애플리케이션과 프로그래밍 환경에서 데이터를 사용하기 쉽게 만듭니다. 이 가이드를 따르면 데이터 변환 프로세스를 간소화하고 통합할 수 있습니다. Google 다른 시스템과 시트 데이터를 더욱 효율적으로 주고받을 수 있습니다.