为什么我不能准备此对象属性?

时间:2020-07-01 15:48:59

标签: javascript json object google-apps-script

我已经尝试了几个小时了。

我收到一个JSON帖子(Shopify),我正在通过doPost(e)网络应用程序使用应用程序脚本进行工作,但这也许无关紧要。

收到后的外观如下

  • 注意postData.contents中奇怪的反斜杠(已字符串化显示在我的控制台中)...
{"contentLength":6450,"queryString":"","postData":{"contents":"{\"id\":820982911946154508,\" 
// clipped because stackoverflow doesn't like it

这是我尝试过的一堆东西

e.postData.contents;
// => {"id":820982911946154508,"email":"jon@doe.ca",...} (Clipped here too)
//Great, looks like a proper object...BUT...

var order = e.postData.contents;
//order.id => undefined

var order = JSON.parse(e.postData.contents);
//order.id => undefined

var order = JSON.parse(JSON.stringify(e.postData.contents));
//order.id => undefined

1 个答案:

答案 0 :(得分:0)

这就是我将9位以上的所有数字转换为字符串的方式 这不是最好的方法,也许如果子字符串包含用逗号或冒号括住的数字,则会破坏数字。

function testStringNum () {
  var test = {"id":820982911946154500,"email":"jon@doe.ca","closed_at":null,"created_at":"2020-07-01T10:01:14-07:00","updated_at":"2020-07-01T10:01:14-07:00","number":234 };
  var result = jsonStringNums(test);  
}

function jsonStringNums(obj) {
  var objString = JSON.stringify(obj);
  var objArray = objString.split(/[:,]+/);
  for (let index in objArray) {
    var regExp = new RegExp(/^(?=.*\d)[\d ]+$/);
    var isNum = regExp.test(objArray[index]);
    if (isNum && objArray[index].length >= 9) {
      objString = objString.replace(objArray[index], '"'+objArray[index]+'"');
    }
  }
  return JSON.parse(objString);
}

必须处理数组中的重复数据,所以更好

function jsonStringNums(obj) { 
  var objString = JSON.stringify(obj);
  var objArrayAll = objString.split(/[:,]+/);
    var objArray = objArrayAll.reduce((unique,item) => {
      return unique.includes(item) ? unique : [...unique,item] }, []);

  var rxAllNumAndSpaces = new RegExp(/^(?=.*\d)[\d ]+$/);
  for (let index in objArray) {
    var isNum = rxAllNumAndSpaces.test(objArray[index]);
    if (isNum && objArray[index].length >= 8) {
      var replacement = '\"'+objArray[index]+'\"';
      var rxAllVarInsts = new RegExp(objArray[index], 'g');
      objString = objString.replace(rxAllVarInsts, replacement);
    }
  } 
  try {
  return JSON.parse(objString);
  } catch (err) { Logger.log('you done messed up your object '+err);return obj; }
}