我试图在邮递员中设置一个较大的int值作为环境变量。但是邮递员正在四舍五入。有什么办法可以解决吗? 请让我知道。
测试:var response = JSON.parse(responseBody); for(var i = 0; i <= response.Offerings.length; i ++){if(response.Offerings [i] .DisplayName =='Samsung Galaxy S9 +'){console.log(response.Offerings [i] .Id ); }}
API响应:响应:{“报价”:[{“金额”:123,“ CurrencyCode”:“ CAD”,“ DisplayName”:“ Samsung Galaxy S9 +”,“ Id”: 1910256760591000500,“语言”:“ en-CA”,“ LineOfBusinesses”:[10048],“ MarketingViews”:[],“名称”:“ Samsung Galaxy S9 +”,“ OfferType”:1,
答案 0 :(得分:0)
我刚刚遇到了同样的问题。通过在解析前以大号添加引号来解决该问题。然后,您可以使用其他they wrote
库获取变量并将其解析为BigIntvar responseBigIntsChangedToStrings = pm.response.text().replace(/([^"\w-])([-0-9.]{8,100})([^"\w-])/g, '$1\"$2\"$3');
var jsonResponse = [...responseBigIntsChangedToStrings.matchAll(/{.*}/g)];
var json = JSON.parse(jsonResponse);
您可以尝试以下方法:
var response = JSON.parse(responseBody.replace(/([^"\w-])([-0-9.]{8,100})([^"\w-])/g, '$1\"$2\"$3'));
for(var i=0; i<=response.Offerings.length ; i++)
{
if(response.Offerings[i].DisplayName == 'Samsung Galaxy S9+')
{
console.log(response.Offerings[i].Id);
}
}
答案 1 :(得分:0)
是的。因此,不是四舍五入的邮递员就是基本的Javascript。 javascript中的数字为双精度浮点数。基本上,在Javascript中,最大原语数是56位,或者称为MAX_SAFE_INTEGER-即9,007,199,254,740,991。大多数语言为64位(9,223,372,036,854,775,807)。 邮递员将发生以下情况:
小例子是这样的:
let x = 9223372036854775807
let y = BigInt(9223372036854775807)
let text = x.toString();
let z = parseInt(text, 10);
console.log(z) // 9223372036854776000
javascript中对此有解决方案。即有几个库,例如“ json-bigint”。但是,将其包含在Postman中并不容易。具有讽刺意味的是,邮递员已经使用了BigInteger,但是当您正在执行的代码是基本javascript时,它将无法使用。但这仍然是@Plurimus解决方案应该起作用的原因。
每当需要Postman中的库时,都有使用requests加载库的方法。在这里,用户演示了如何加载主要存储在cloudflare上的库。和剧透-json-bigint-不在那里。这是一个npmjs库,只会增加添加难度。 您肯定会遇到的一个问题是Postman的预请求是异步的。这意味着您的库可能已加载,但是应该使用该库的代码已经执行。幸运的是,有人为此找到了hack。
在我的解决方案中,我想要使用的个人github上有一个library的链接。总是叉这样的东西。然后,我使用邮递员获取代码。并使用eval覆盖JSON对象。有一些初步代码显示加载库之前和之后的值。 该请求在名为main的方法中运行,该方法是一种添加到预请求中的异步方法,以确保该函数中的所有内容均同步运行。
console.log('hello');
var libraryLink = 'https://gist.githubusercontent.com/kentkost/f2699eb1dd41e2eb6203f0d0c77a987e/raw/bffae74aa3827ea195c10cf83bce4d78017bdf2d/postman-bigint.js'
let dummyJson = '{ "value" : 9223372036854775807, "v2": 123 }'
let obj = JSON.parse(dummyJson)
console.log(obj.value);
console.log(JSON.stringify(obj));
const _dummy = setInterval(() => {}, 300000);
function sendRequest(req) {
return new Promise((resolve, reject) => {
pm.sendRequest(req, (err, res) => {
if (err) {
return reject(err);
}
return resolve(res);
})
});
}
(async function main() {
let result1 = await sendRequest(libraryLink);
eval(result1.text());
let newObj = JSON.parse(dummyJson);
console.log(newObj.value);
pm.environment.set("someVar", newObj.value);
console.log(JSON.stringify(newObj));
console.log('bye');
clearInterval(_dummy)
})();