Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过迭代范围在Google Apps脚本中创建JSON对象_Json_Google Apps Script - Fatal编程技术网

如何通过迭代范围在Google Apps脚本中创建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

我正在尝试编写一个脚本,通过RESTAPI批量更新Woocommerce商店中的产品。API要求将请求作为JSON对象发送,但我无法以必要的格式构建该对象

对象应如下所示:

'{
"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=[]中创建一个数组//starting loop
for ( i = 0; i < lastrow; i++){
   APIPayloadObject.update[i] = {
      id:   loopRange[i][0],
      name: loopRange[i][1]
   };
}