使用JS导入API JSON数据至Google Sheets:如何拆分单个单元格内的数组到行列
问题解决方法
问题根源
Ozon的分类树接口返回的JSON数据包含嵌套数组/对象结构,你当前使用的代码仅提取了JSON第一层的键和对应值,遇到数组类型的值时会直接将整个数组对象写入单个单元格,不会自动拆分,这就是数组挤在同一个单元格的原因。
另外原代码存在参数配置错误:muteHttpExceptions是UrlFetchApp.fetch的顶层参数,不需要放到body中,且GET请求也不需要携带body配置。
修改后可用代码
直接替换你现有的pullJSON函数即可,代码会自动展开数组、嵌套对象到不同列,你也可以根据自己的需求调整遍历逻辑适配更深层级的嵌套结构:
function pullJSON() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var options = { method: "GET", "headers" : { "Client-Id": "XXX", "Api-Key": "XXX-XXX-XXX-XXX-XXX", "Content-Type": "application/json" }, muteHttpExceptions: true } var url="https://api-seller.ozon.ru/v1/categories/tree"; var response = UrlFetchApp.fetch(url, options); var dataAll = JSON.parse(response.getContentText()); var rows = []; var headers = []; var values = []; // 遍历第一层JSON键值对,自动拆分数组、嵌套对象 for (var key in dataAll) { var currentValue = dataAll[key]; // 处理数组类型:拆分到多个带索引的列 if (Array.isArray(currentValue)) { for (var i = 0; i < currentValue.length; i++) { headers.push(`${key}_${i+1}`); // 如果数组元素是对象,此处可修改为提取对象指定字段,当前默认转字符串写入 values.push(typeof currentValue[i] === 'object' ? JSON.stringify(currentValue[i]) : currentValue[i]); } // 处理第一层嵌套对象:拆分对象属性为单独列 } else if (typeof currentValue === 'object') { for (var objKey in currentValue) { headers.push(`${key}_${objKey}`); values.push(currentValue[objKey]); } // 普通值直接写入 } else { headers.push(key); values.push(currentValue); } } rows.push(headers); rows.push(values); // 写入前清空原有内容避免残留 sheet.clearContents(); sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows); }
如果你需要把数组元素按行拆分而非按列拆分,只需要调整遍历逻辑,把每个数组元素组装为单独的行对象写入即可。
内容的提问来源于stack exchange,提问作者Nikita
相关产品推荐
相关产品推荐

