如何将 JSON 字符串数据更改为 JSON 数字数据
How to change JSON String data to JSON Number data
大家好,我正在尝试获取 'review' 的数值,但在 JSON 中它 returns 是一个字符串,因此我不能t 执行我所做的求和,结果是一个无意义的值
objective 是,当有人对 X 产品发表评论时,数据保存在 Firebase 中 JSON,问题是 'review' 被保存为一个字符串而不是保存为数字
有没有办法把这个单条数据转换成数字?
这是JSON响应
"[{\"review\":\"4\",\"comment\":\"Good product \",\"name\":\"SnowFall\",\"image\":\"https://lh3.googleusercontent.com\",\"method\":\"google\"}]"
这是我的 TypeScript
callback(i, totalReviews) {
if (!this.render) {
this.render = true;
let globalRating = 0;
let globalReviews = 0;
setTimeout(function () {
totalReviews.forEach((review, index) => {
globalRating += review.length;
for (const i in review) {
globalReviews += review[i].review;
console.log("globalReviews", globalReviews);
}
})
console.log("Raiting", globalRating);
console.log("Reviews", globalReviews);
let averageReviews = Math.round(globalReviews / globalRating);
let precentage = Math.round(globalReviews * 100 / (globalRating * 5));
$(".globalRating").html(globalRating);
$(".percentage").html(precentage);
let averageRating = DinamicReviews.fnc(averageReviews);
$(".br-theme-fontawesome-stars").html(`
<select class="ps-rating reviewsOption" data-read-only="true"></select>
`)
for (let i = 0; i < averageRating.length; i++) {
$(".reviewsOption").append(`
<option value="${averageRating[i]}">${i + 1}</option>
`)
}
Rating.fnc();
}, i * 10)
}
}
这是它在 FireBase 中的保存方式 FireBase RealTime Database
这是它在我的前端上的样子
FrontEnd
有一行将 .review
值分配给 globalReviews
变量,因为这是使用 +=
这将连接字符串,这就是您面临的问题.
如果您将同一行更改为:globalReviews += +review[i].review;
这将修复错误。
之所以在变量前面添加一个 +
符号是因为这个符号被称为 一元加运算符,它将值转换为数字或者如果存储值不是数字,它将在 Unary Plus Operator documentation
之后转换
为了使此代码安全并因此不添加可能的 NaN
您可以使用以下语法将故障安全设置为 0 globalReviews += +review[i].review || 0;
大家好,我正在尝试获取 'review' 的数值,但在 JSON 中它 returns 是一个字符串,因此我不能t 执行我所做的求和,结果是一个无意义的值
objective 是,当有人对 X 产品发表评论时,数据保存在 Firebase 中 JSON,问题是 'review' 被保存为一个字符串而不是保存为数字
有没有办法把这个单条数据转换成数字?
这是JSON响应
"[{\"review\":\"4\",\"comment\":\"Good product \",\"name\":\"SnowFall\",\"image\":\"https://lh3.googleusercontent.com\",\"method\":\"google\"}]"
这是我的 TypeScript
callback(i, totalReviews) {
if (!this.render) {
this.render = true;
let globalRating = 0;
let globalReviews = 0;
setTimeout(function () {
totalReviews.forEach((review, index) => {
globalRating += review.length;
for (const i in review) {
globalReviews += review[i].review;
console.log("globalReviews", globalReviews);
}
})
console.log("Raiting", globalRating);
console.log("Reviews", globalReviews);
let averageReviews = Math.round(globalReviews / globalRating);
let precentage = Math.round(globalReviews * 100 / (globalRating * 5));
$(".globalRating").html(globalRating);
$(".percentage").html(precentage);
let averageRating = DinamicReviews.fnc(averageReviews);
$(".br-theme-fontawesome-stars").html(`
<select class="ps-rating reviewsOption" data-read-only="true"></select>
`)
for (let i = 0; i < averageRating.length; i++) {
$(".reviewsOption").append(`
<option value="${averageRating[i]}">${i + 1}</option>
`)
}
Rating.fnc();
}, i * 10)
}
}
这是它在 FireBase 中的保存方式 FireBase RealTime Database
这是它在我的前端上的样子 FrontEnd
有一行将 .review
值分配给 globalReviews
变量,因为这是使用 +=
这将连接字符串,这就是您面临的问题.
如果您将同一行更改为:globalReviews += +review[i].review;
这将修复错误。
之所以在变量前面添加一个 +
符号是因为这个符号被称为 一元加运算符,它将值转换为数字或者如果存储值不是数字,它将在 Unary Plus Operator documentation
为了使此代码安全并因此不添加可能的 NaN
您可以使用以下语法将故障安全设置为 0 globalReviews += +review[i].review || 0;