Javascript - convert an EXTRA LARGE Number to string in JSON before the default parsing

前端 未结 4 1074
走了就别回头了
走了就别回头了 2021-01-20 00:31

As I mentioned in THIS QUESTION, I have problem when getting the response from the server.

I receive an array of objects with these attributes:

[{
\"         


        
相关标签:
4条回答
  • 2021-01-20 00:43

    you can use replacer in JSON.stringify() like :

    var obj  = {
    "Id": 143187001116603,   // VERY big number which I want to convert it to string
    "Name": "تملی612",   // string
    "Title": "تسهیلات مسکن بانک ملی-اسفند96",   // string
    "InsCode": "IRO6MELZ96C1"   // string
    };
    
    
    function replacer(name, val) {
        // convert Number to string
        if ( val && val.constructor === Number ) {
            return val.toString();
        } else {
            return val; // return as is
        }
    };
    
     JSON.stringify(obj, replacer, 4);
    

    // result

    {
        "Id": "143187001116603",
        "Name": "تملی612",
        "Title": "تسهیلات مسکن بانک ملی-اسفند96",
        "InsCode": "IRO6MELZ96C1"
    }
    
    0 讨论(0)
  • 2021-01-20 00:49

    function replacer(key, value) {
      // Filtering out properties
      if (key === 'Id') {
        return value.toString();
      }
      return value;
    }
    
    const t = [{
        "Id": 143187001116603, // VERY big number which I want to convert it to string
        "Name": "تملی612", // string
        "Title": "تسهیلات مسکن بانک ملی-اسفند96", // string
        "InsCode": "IRO6MELZ96C1" // string
      },
      {
        "Id": 9481703061634967, // VERY big number which I want to convert it to string
        "Name": "تملی232", // string
        "Title": "تسهیلات مسکن بانک ملی-اسفن216", // string
        "InsCode": "IRO6MSDZ96C1" // string
      }
    ]
    const stringifiedValue = JSON.stringify(t, replacer)
    console.log(JSON.parse(stringifiedValue))

    Try this using replacer callback for JSON.stringify.

    Feedbacks welcome.

    0 讨论(0)
  • 2021-01-20 00:54

    Assuming that you receive the data as a Json string with the numbers inside them, there is no way to preserve the data using JSON.parse. Even if you use the second argument to add a transformation function, it will only be run after the default parsing has parsed the numbers with a loss of information in case of large numbers. You need to manipulate the string directly to wrap the number in quotes using e.g. a regular expression.

    You can also use the json-bigint npm package: https://www.npmjs.com/package/json-bigint

    0 讨论(0)
  • 2021-01-20 00:58

    Transform the response to string, then apply a repalce with a regex to convert Id field to string type:

    const axios = require('axios');
    
    axios.get(url, { transformResponse: [data => data] }).then(response => {
      let parsed = JSON.parse(response.data.replace(/"Id":(\d+),/g, '"Id":"$1",'));
      console.log(parsed);
    });
    
    0 讨论(0)
提交回复
热议问题