【问题标题】:Why can't I ready this Object properties?为什么我不能准备好这个对象属性?
【发布时间】:2020-07-01 15:48:59
【问题描述】:

我已经尝试了几个小时来解决这个问题。

我收到一条 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

【问题讨论】:

  • "contents":"{\"id\":820982911946154508,\"contents 显然是一个字符串,而不是一个对象。注意转义的引号:\"。它很可能是一个 json 字符串。
  • console.log(typeof e.postData.contents) 会看到什么?
  • @ASDFGerte 这就是他尝试JSON.parse(e.postData.contents)的原因
  • 在您执行order = JSON.parse(e.postData.contents); 之后,console.log(order) 会显示什么?
  • 您显示的 json 无效,您可以显示有效的 json。这将有助于我们给出更好的答案

标签: javascript json object google-apps-script


【解决方案1】:

这就是我将所有超过 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; }
}

【讨论】:

    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 2018-05-22
    • 2018-05-24
    • 1970-01-01
    • 2018-05-27
    • 2015-05-16
    • 2012-09-27
    • 1970-01-01
    相关资源
    最近更新 更多