如何通过迭代范围在Google Apps脚本中创建JSON对象
我正在尝试编写一个脚本,通过RESTAPI批量更新Woocommerce商店中的产品。API要求将请求作为JSON对象发送,但我无法以必要的格式构建该对象 对象应如下所示:如何通过迭代范围在Google Apps脚本中创建JSON对象,json,google-apps-script,Json,Google Apps Script,我正在尝试编写一个脚本,通过RESTAPI批量更新Woocommerce商店中的产品。API要求将请求作为JSON对象发送,但我无法以必要的格式构建该对象 对象应如下所示: '{ "update": [ { "id": 799, "name": "product name" }, { "id": 800, "name": "product name 1" } ] }' 我试图用以下方法构建对象,但它不起作用: va
'{
"update": [
{
"id": 799,
"name": "product name"
},
{
"id": 800,
"name": "product name 1"
}
]
}'
我试图用以下方法构建对象,但它不起作用:
var APIPayloadObject = {update:[]};
//starting loop
for ( i = 0; i < lastrow; i++){
var product = [];
product.push({
id: loopRange[i][0],
name: loopRange[i][1]
})
//???????
}
Logger.log(JSON.stringify(APIPayloadObject));
var APIPayloadObject={update:[]};
//起动回路
对于(i=0;i
在问号处,我不知道如何将产品数组推入对象中示例1 正如我在评论中提到的,第一种解决方案是访问
update
属性并在其上调用push()
,因为您已经定义了update
以包含数组
实例:
//starting loop
for ( i = 0; i < lastrow; i++){
APIPayloadObject.update.push({
id: loopRange[i][0],
name: loopRange[i][1]
})
}
这是一个很好的用例
/@param{sheetValues[][]}loopRange
函数getPayload(loopRange){
返回JSON.stringify({
更新:loopRange.map(函数(行){
返回{id:row[0],name:row[1]};
})
});
}
既然update
属性已经包含了Array
的一个实例作为值,为什么不在每个循环阶段使用APIPayloadObject.update.push()
而不是重新初始化产品
数组呢?因为我只是一个爱好开发者,在这方面没有经验。:)我觉得应该很简单。你的样本让我找到了解决方案。当我简单地这样声明对象时:var-APIPayloadObject={}代码>我总是得到TypeError:无法调用未定义的“push”方法。我又添加了一行:APIPayloadObject.update=[]代码>现在它的工作方式与我预期的一样。谢谢你。NP,很高兴它为你指明了正确的方向!至于TypeError
——这仅仅是因为push()
是数组的一种方法,并且不存在于它从(Object
)->继承的内置构造函数{}
返回Object
和[]
数组的一个实例
还有一件事:如果字段名也存储在变量中,您能写信给我如何设置字段名吗?我将创建一个通用函数,无论更改哪个字段,都可以调用该函数。这不起作用:APIPayloadObject.update.push({[changedField]:updateValue})
Sure-如果您习惯于ES6计算属性,请忘记在{}
构造函数中使用它们(应用程序脚本基于早期版本)-将对象写入变量,然后通过括号符号添加计算出的道具,如下所示:obj[varProp]=value
,您应该可以开始了。很抱歉让您感到厌倦。基本上它是有效的,但是如果对象中首先应该有一个数组,我就不知道如何将属性放入对象中。请参阅本线程最前面的对象示例。首先,我在对象APIPayloadObject.update=[]中创建一个数组然后我应该把propertien推到里面。谢谢,谢谢你的帮助。我没有检查您的代码,因为第一个建议让我找到了解决方案。;)
//starting loop
for ( i = 0; i < lastrow; i++){
APIPayloadObject.update[i] = {
id: loopRange[i][0],
name: loopRange[i][1]
};
}