[英]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这是收到时的样子
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.