简体   繁体   English

为什么我不能准备好这个 Object 属性?

[英]Why can't I ready this Object properties?

I have been trying to figure this out for a couple hours now.我已经尝试了几个小时来解决这个问题。

I am receiving a JSON post (Shopify), I'm working in app script via doPost(e) web app, but maybe that's irrelevant.我收到 JSON 帖子(Shopify),我正在通过doPost(e) web 应用程序在应用程序脚本中工作,但这可能无关紧要。

Here's how it looks when received这是收到时的样子

  • notice the weird backslashes in postData.contents (it was stringified to show in my console)...注意postData.contents中奇怪的反斜杠(它被字符串化以显示在我的控制台中)......
{"contentLength":6450,"queryString":"","postData":{"contents":"{\"id\":820982911946154508,\" 
// clipped because stackoverflow doesn't like it

Here are a bunch of things I've tried这是我尝试过的很多事情

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

This is how I convert all numbers over 9 digits to strings Not the best, maybe if a substring contains commas or colons that surround a number, it will break it.这就是我将超过 9 位的所有数字转换为字符串的方法 不是最好的,也许如果 substring 包含围绕数字的逗号或冒号,它会破坏它。

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);
}

Had to handle duplicate data in the array, so this is better必须处理数组中的重复数据,所以这更好

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; }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM