我已经尝试了几个小时了。
我收到一个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
答案 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; }
}