Home > database >  How to change JSON String data to JSON Number data
How to change JSON String data to JSON Number data

Time:10-06

Good day everyone, I'm trying to obtain the numerical value of 'review' what happens is that in the JSON it returns it as a String and therefore I cann't perform a sum that I did, resulting in a meaningless value

The objective is that, when someone makes a comment about an X product, the data is saved in Firebase in a JSON, the problem is that 'review' is saved as a String and not saved as a number

Is there a way to take this single piece of data and convert it to number?

This is the JSON response

"[{\"review\":\"4\",\"comment\":\"Good product \",\"name\":\"SnowFall\",\"image\":\"https://lh3.googleusercontent.com\",\"method\":\"google\"}]"

This is my 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)
    }
  }

This is how it is saved in FireBase FireBase RealTime Database

This is how it looks on my FrontEnd FrontEnd

CodePudding user response:

There is a line where you assign the .review value to the globalReviews variable as this is using = this shall be concatenating the string and that is the problem you are facing.

If you change that same line to: globalReviews = review[i].review;

This will fix the error.

The reason why adding a sign in front of a variable works is because this sign is known as the Unary Plus Operator which converting the value to a number or in case the store value is not a number it will convert following the Unary Plus Operator documentation

To make this code safe and thus not add a possible NaN you can failsafe to 0 by using the following syntax globalReviews = review[i].review || 0;

  • Related