Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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
Apps脚本JSON.parse()返回意外结果,如何解决此问题?_Json_Google Apps Script - Fatal编程技术网

Apps脚本JSON.parse()返回意外结果,如何解决此问题?

Apps脚本JSON.parse()返回意外结果,如何解决此问题?,json,google-apps-script,Json,Google Apps Script,我目前正在使用GoogleSheets和JSON开发外部应用程序,通过FetchAPI进行数据传输。我决定模拟这个场景(为了调试),然后简单的JSON从我的外部应用程序通过准备好的Code.gs发布到Google表单上。我在应用程序脚本中运行的代码片段如下所示: function _doPost(/* e */) { // const body = e.postData.contents; const bodyJSON = JSON.parse("{\"coords\

我目前正在使用GoogleSheets和JSON开发外部应用程序,通过FetchAPI进行数据传输。我决定模拟这个场景(为了调试),然后简单的JSON从我的外部应用程序通过准备好的Code.gs发布到Google表单上。我在应用程序脚本中运行的代码片段如下所示:

function _doPost(/* e */) {
  // const body = e.postData.contents;
  const bodyJSON = JSON.parse("{\"coords\" : \"123,456,789,112,113,114,115,116\"}" /* instead of : body */);
  const db = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  db.getRange("A1:A10").setValue(bodyJSON.coords).setNumberFormat("@"); // get range, set value, set text format
}
  const bodyJSON = {
    "coords" : "123,456,789,112,113,114,115,116"
    }
问题是我得到的结果:
1234567891112113000000000
如您所见,
从114开始,然后它输出我
000,
。我想,好吧,我要明确指定返回(保存)为文本格式的格式。如果输出在Google Sheets UI上选择的范围内:格式->数字->它会显示文本

然而,有趣的神奇发生了,假设我将更新JSON的主体,以进行类似的解析,当数字序列由2位数字而不是3位数字组成时(注意:这些数字是字符串的实际部分,而不是真正的数字,用逗号分隔!):
“{\'coords\:”1234567891112113114115116,17,18\“}”
它不仅会按预期显示响应结果,而且还会将隐藏在
000,…
下的“损坏”值带回来,“{”coords:“123456789111113,114115116,17,18}”


甚至Logger.log()也会按预期返回初始JSON输入。我真的不知道发生了什么事。我非常感谢您的来信来帮助解决这个问题。谢谢。

您可以尝试在bodyJSON变量中直接分配JSON格式的字符串,而不是使用JSON.parse解析一组字符串

部分代码应如下所示:

function _doPost(/* e */) {
  // const body = e.postData.contents;
  const bodyJSON = JSON.parse("{\"coords\" : \"123,456,789,112,113,114,115,116\"}" /* instead of : body */);
  const db = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  db.getRange("A1:A10").setValue(bodyJSON.coords).setNumberFormat("@"); // get range, set value, set text format
}
  const bodyJSON = {
    "coords" : "123,456,789,112,113,114,115,116"
    }

我找到了简单的解决方法:只添加了前面的一对零0,0,123,。。。在coords的一开始。这防止了我在问题中定义的所谓罪犯。如果有人感兴趣,我目前正在构建的外部应用程序称为热点小部件:玩转DOM,添加一个标记,通过应用程序脚本推送坐标(coords),并保存到Google工作表。我提供了一个关于如何设置自己的应用程序副本的说明链接。这是一个学习普通JavaScript基础知识的良好开端,包括简单的动态数据库方法。谢谢你,祝你好运

[Hotspot widget: https://codepen.io/projektorius96/pen/abmQjPd][1]

谢谢你的合作。不幸的是,即使没有JSON.parse(),它也会返回相同的罪魁祸首000。有趣的事实是,例如,如果range更改为单个单元格,例如db.getRange(“A11”).setValue(bodyJSON.coords).setNumberFormat(“@”);它按预期返回结果,即1234567891112113114115116。此外,如果逗号可以删除为{“coords”:“1234567891112113114115116},则在Google工作表中推送数据之前,它可以正常工作。不幸的是,我的应用程序返回了一对坐标,这就是为什么我不能遵循这种解决方法的原因。:)