如何解析JSON Web API数据并通过responseToRows()函数转换为行数据
Fixing the
responseToRows() Function for Parsing Your JSON Data 我来帮你搞定这个解析函数的问题!你的思路方向是对的,只是几个细节没处理到位,主要是没正确引用JSON对象里的属性,还有遍历的数据源搞错了。咱们来一步步修正:
修正后的完整函数代码
function responseToRows(requestedFields, parsedResponse) { // Transform parsed data and filter for requested fields return parsedResponse.map(function(item) { // 遍历解析后的JSON数组,item对应每个{CODE,PRICE,QTY}对象 var row = []; requestedFields.asArray().forEach(function (field) { switch (field.getId()) { case 'CODE': row.push(item.CODE); // 引用当前对象的CODE属性值 break; // 用break终止当前case,避免forEach提前结束 case 'PRICE': row.push(item.PRICE); break; case 'QTY': row.push(item.QTY); break; default: row.push(''); break; } }); return { values: row }; }); }
关键改动说明
- 遍历正确的数据源:把原代码里的
response.map改成parsedResponse.map——毕竟parsedResponse才是你从API拿到并解析后的目标JSON数组,每个循环的item就是数组里的单个业务对象。 - 正确引用对象属性:在
switch的每个case里,不能直接写CODE这种变量名,要写成item.CODE,这样才能精准获取当前对象里的对应字段值。 - 用
break代替return:原代码里的return row.push(...)会直接终止forEach循环,导致后面的字段无法被处理,换成break才能让switch正常走完所有字段的判断逻辑。
简单使用示例
假设你已经拿到了解析后的JSON数据,调用方式大概是这样:
// 示例:从API解析后的JSON数据 const parsedResponse = [ { CODE: 'NPM_PACKAGE_001', PRICE: 15, QTY: 42 }, { CODE: 'NPM_PACKAGE_002', PRICE: 28, QTY: 19 } ]; // 传入请求字段集合和解析后的数据,得到行结构 const resultRows = responseToRows(requestedFields, parsedResponse); Logger.log(resultRows); // 现在就能看到符合要求的行数据了
这样修改后,函数就能把你的JSON数组转换成目标行数据结构,每个{ values: row }对应一行,row里的元素顺序会和requestedFields的顺序保持一致。
内容的提问来源于stack exchange,提问作者KUAN CHUNG LIN
相关产品推荐
相关产品推荐

