欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js中的bigint類型轉(zhuǎn)化為json字符串時(shí)報(bào)無(wú)法序列化的問(wèn)題

 更新時(shí)間:2024年01月23日 09:52:43   作者:panglinglong  
JSON序列化指將JSON對(duì)象轉(zhuǎn)換為JSON字符串,J實(shí)現(xiàn)方式有兩種:一種是調(diào)用JSON對(duì)象內(nèi)置的stringify()函數(shù),一種是為對(duì)象自定義toJSON()函數(shù),本文重點(diǎn)介紹js中的bigint類型轉(zhuǎn)化為json字符串時(shí)報(bào)無(wú)法序列化的問(wèn)題,感興趣的朋友一起看看吧

網(wǎng)上查了一下,解決這個(gè)問(wèn)題的思路就是將bigint類型的數(shù)據(jù)轉(zhuǎn)化為字符串,這樣就能正確轉(zhuǎn)化為json字符串了。對(duì)于一個(gè)是bigint的變量,直接使用toString方法就可以轉(zhuǎn)化為字符串了,但是bigint變量在一個(gè)對(duì)象中,那么我們就需要一個(gè)更加通用的方法,網(wǎng)上看到一個(gè)很好的封裝好的方法,如下。

export default function objReplacer(key, value) {
  if (typeof value === 'bigint') {
      return value.toString();
  } else if (typeof value === 'object') {
      for (const k in value) {
          if (typeof value[k] === 'bigint') {
              value[k] = value[k].toString();
          } else if (typeof value[k] === 'object') {
              value[k] = objReplacer(k, value[k]); // 遞歸處理嵌套對(duì)象
          }
      }
  }
  return value;
}
import objReplacer from "src/utils/bingintToString"
JSON.stringify(res,objReplacer)

擴(kuò)展

JavaScript JSON序列化和反序列化

概述

JSON序列化指將JSON對(duì)象轉(zhuǎn)換為JSON字符串。J實(shí)現(xiàn)方式有兩種:一種是調(diào)用JSON對(duì)象內(nèi)置的stringify()函數(shù),一種是為對(duì)象自定義toJSON()函數(shù)。

JSON反序列化指將JSON字符串轉(zhuǎn)換為JSON對(duì)象。實(shí)現(xiàn)方式有兩種:一種是使用JSON對(duì)象內(nèi)置的parse()函數(shù),一種是使用eval()函數(shù)。

序列化

方式一:JSON.stringify()

語(yǔ)法

JSON.stringify(value, replacer, space)

說(shuō)明

參數(shù)value:需要處理的值,可以為對(duì)象活數(shù)組。

參數(shù)replacer:可選參數(shù)。

  • 如果其值為一個(gè)函數(shù),則表示在序列化過(guò)程中,被序列化值的每個(gè)屬性都會(huì)經(jīng)過(guò)該函數(shù)的處理;
  • 如果其值為一個(gè)數(shù)組,則表示只有包含在這個(gè)數(shù)組中的屬性名才會(huì)被序列化到最終的JSON字符串中;
  • 如果該值為null或者未傳遞,則value參數(shù)對(duì)應(yīng)值的所有屬性都會(huì)被序列化。

參數(shù)space:可選參數(shù)。用于指定縮進(jìn)用的空白字符串,美化輸出。

  • 如果參數(shù)是個(gè)數(shù)字,則代表有多少個(gè)空格,上限值為10;
  • 如果該參數(shù)的值小于1,則意味著沒(méi)有空格;
  • 如果參數(shù)為字符串,則取字符串的前十個(gè)字符作為空格;
  • 如果沒(méi)有傳入?yún)?shù)或者傳入的值為null,將沒(méi)有空格。
var obj = {
    name: "xiaoming",
    age: 18,
    sex: true,
    address: ["廣東省", "廣州市"]
};
var jsonStr = JSON.stringify(obj);
console.log(jsonStr); 
//{"name":"xiaoming","age":18,"sex":true,"address":["廣東省","廣州市"]}

使用2個(gè)參數(shù)

var obj = {
    name: "xiaoming",
    age: 18,
    sex: true,
    address: ["廣東省", "廣州市"]
};
function replacerFn(key, value) {
    if (typeof value === "string") {
        return value.toUpperCase();
    }
    return value;
}
var jsonStr = JSON.stringify(obj, replacerFn);
console.log(jsonStr);
//{"name":"XIAOMING","age":18,"sex":true,"address":["廣東省","廣州市"]}

var obj = {
    name: "xiaoming",
    age: 18,
    sex: true,
    address: ["廣東省", "廣州市"]
};
var jsonStr = JSON.stringify(obj, ["name", "age"]);
console.log(jsonStr);
//{"name":"xiaoming","age":18}

使用3個(gè)參數(shù)

var obj = {
    name: "xiaoming",
    age: 18,
    sex: true,
    address: ["廣東省", "廣州市"]
};
function replacerFn(key, value) {
    if (typeof value === "string") {
        return value.toUpperCase();
    }
    return value;
}
var jsonStr = JSON.stringify(obj, ["name", "age"], 10);
console.log(jsonStr);

var obj = {
    name: "xiaoming",
    age: 18,
    sex: true,
    address: ["廣東省", "廣州市"]
};
function replacerFn(key, value) {
    if (typeof value === "string") {
        return value.toUpperCase();
    }
    return value;
}
var jsonStr = JSON.stringify(obj, ["name", "age"], "@@@");
console.log(jsonStr);

在這里插入圖片描述

其他

var jsonStr = JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
console.log(jsonStr); 
//[1,"false",false]
var jsonStr = JSON.stringify({
    x: undefined,
    y: Object,
    z: Symbol("")
});
console.log(jsonStr);
//{}
var jsonStr = JSON.stringify([undefined, Object, Symbol("")]);
console.log(jsonStr);
//[null,null,null]

方式二:自定義toJson

如果一個(gè)被序列化的對(duì)象擁有toJSON()函數(shù),那么toJSON()函數(shù)就會(huì)覆蓋默認(rèn)的序列化行為,被序列化的值將不再是原來(lái)的屬性值,而是toJSON()函數(shù)的返回值。

toJSON()函數(shù)用于更精確的控制序列化,可以看作是對(duì)stringify()函數(shù)的補(bǔ)充。

var obj = {
    name: "xiaoming",
    age: 18,
    sex: true,
    address: ["廣東省", "廣州市"],
    toJSON: function() {
        return {
            Name: this.name,
            Age: this.age,
            Sex: this.sex
        };
    }
};
var jsonStr = JSON.stringify(obj);
console.log(jsonStr);
//{"Name":"xiaoming","Age":18,"Sex":true}

序列化順序

序列化處理的順序如下:

  • 如果待序列化的對(duì)象存在toJSON()函數(shù),則優(yōu)先調(diào)用toJSON()函數(shù),以toJSON()函數(shù)的返回值作為待序列化的值,否則返回JSON對(duì)象本身。
  • 如果stringify()函數(shù)提供了第二個(gè)參數(shù)replacer,則對(duì)上一步的返回值經(jīng)過(guò)replacer參數(shù)處理。
  • 如果stringify()函數(shù)提供了第三個(gè)參數(shù),則對(duì)JSON字符串進(jìn)行格式化處理,返回最終的結(jié)果。

反序列化

方式一:JSON.parse()

語(yǔ)法

JSON.parse(text, reviver)

說(shuō)明

參數(shù)text:待解析度JSON字符串。

參數(shù)reviver:可選參數(shù)。

  • 如果是一個(gè)函數(shù),則規(guī)定了原始值在返回之前如何被解析改造。
  • 如果被解析的JSON字符串是非法的,則會(huì)拋出異常。

僅一個(gè)參數(shù)使用

var arrStr = '[1,true,"hello"]';
var arr = JSON.parse(arrStr);
console.log(arr); //[1, true, "hello"]
var objStr = `{
"name":"xiaoming",
"age":18,
"address":"beijing"
}`;
var obj = JSON.parse(objStr);
console.log(obj); //{name: "xiaoming", age: 18, address: "beijing"}
var a = "12.34";
var result = JSON.parse(a);
console.log(result); //12.34

使用2個(gè)參數(shù)

var objStr = `{
"name":"xiaoming",
"age":18,
"address":"beijing"
}`;
var result = JSON.parse(objStr, function(key, value) {
    if (key === "name") {
        return value + "先生";
    }
    if (key === "age") {
        return value + "歲";
    }
    return value;
});
console.log(result); //{name: "xiaoming先生", age: "18歲", address: "beijing"}

方式二eval()

eval()函數(shù)用于計(jì)算JavaScript字符串,并把它作為腳本來(lái)執(zhí)行。

語(yǔ)法

eval("(" + str + ")")

說(shuō)明

這里為什么要使用括號(hào)將拼接出來(lái)的字符串括起來(lái)呢?

因?yàn)镴SON字符串是以“{}”表示開始和結(jié)束,在JavaScript中它會(huì)被當(dāng)作一個(gè)語(yǔ)句塊來(lái)處理,所以必須強(qiáng)制將它處理成一個(gè)表達(dá)式,所以采用括號(hào)。

使用

var objStr = `{
"name":"xiaoming",
"age":18,
"address":"beijing"
}`;
var result = eval("(" + objStr + ")");
console.log(result); //{name: "xiaoming先生", age: "18歲", address: "beijing"}

到此這篇關(guān)于js中的bigint類型轉(zhuǎn)化為json字符串時(shí)報(bào)無(wú)法序列化的問(wèn)題的文章就介紹到這了,更多相關(guān)js bigint類型轉(zhuǎn)化json字符串報(bào)無(wú)法序列化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js實(shí)現(xiàn)網(wǎng)頁(yè)同時(shí)進(jìn)行多個(gè)倒計(jì)時(shí)功能

    js實(shí)現(xiàn)網(wǎng)頁(yè)同時(shí)進(jìn)行多個(gè)倒計(jì)時(shí)功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)網(wǎng)頁(yè)同時(shí)進(jìn)行多個(gè)倒計(jì)時(shí)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 原生JS實(shí)現(xiàn)手動(dòng)輪播圖效果實(shí)例代碼

    原生JS實(shí)現(xiàn)手動(dòng)輪播圖效果實(shí)例代碼

    手動(dòng)輪播圖,為輪播圖中的一種,輪播圖主要有無(wú)縫輪播,手動(dòng)輪播,延遲輪播,切換輪播等等,輪播圖主要用于展現(xiàn)圖片,新出商品,詞條,又能美觀網(wǎng)頁(yè)。給網(wǎng)頁(yè)中增加動(dòng)態(tài)效果。接下來(lái)通過(guò)本文給大家分享原生JS實(shí)現(xiàn)手動(dòng)輪播圖的實(shí)例代碼,一起看看吧
    2018-11-11
  • javascript實(shí)現(xiàn)的基于金山詞霸網(wǎng)絡(luò)翻譯的代碼

    javascript實(shí)現(xiàn)的基于金山詞霸網(wǎng)絡(luò)翻譯的代碼

    下面的這段代碼是基于金山詞霸網(wǎng)絡(luò)翻譯提供的接口,遠(yuǎn)程調(diào)用文件,可以作為一個(gè)自定義的在線查詢工具。
    2010-01-01
  • 關(guān)鍵字空格替換為逗號(hào)的js代碼

    關(guān)鍵字空格替換為逗號(hào)的js代碼

    這個(gè)功能主要是方便我們?cè)诎l(fā)布文章時(shí)填寫關(guān)鍵字的時(shí)候,不用切換為英文狀態(tài)輸入逗號(hào),他可以將中文逗號(hào)和空格統(tǒng)一轉(zhuǎn)換為英文逗號(hào),提高工作效率。
    2008-11-11
  • 前端實(shí)現(xiàn)序列幀動(dòng)畫的幾種常見(jiàn)方法

    前端實(shí)現(xiàn)序列幀動(dòng)畫的幾種常見(jiàn)方法

    這篇文章主要介紹了前端實(shí)現(xiàn)序列幀動(dòng)畫的多種方法,包括CSS動(dòng)畫、JavaScript控制、Canvas繪制、SVG動(dòng)畫和WebGL,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • js中常見(jiàn)的4種創(chuàng)建對(duì)象方式與優(yōu)缺點(diǎn)

    js中常見(jiàn)的4種創(chuàng)建對(duì)象方式與優(yōu)缺點(diǎn)

    不管是哪門語(yǔ)言,千變?nèi)f化不離其宗,深入理解其本質(zhì),方能應(yīng)用自如,下面這篇文章主要給大家介紹了關(guān)于js中常見(jiàn)的4種創(chuàng)建對(duì)象方式與優(yōu)缺點(diǎn),文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • JavaScript實(shí)現(xiàn)重置表單(reset)的方法

    JavaScript實(shí)現(xiàn)重置表單(reset)的方法

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)重置表單(reset)的方法,涉及javascript中reset()方法的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • javascript填充默認(rèn)頭像方法

    javascript填充默認(rèn)頭像方法

    本篇文章通過(guò)代碼實(shí)例給大家講述了如何javascript填充默認(rèn)頭像以及相代碼分享,對(duì)此有興趣的朋友可以學(xué)習(xí)下。
    2018-02-02
  • ES6實(shí)現(xiàn)的遍歷目錄函數(shù)示例

    ES6實(shí)現(xiàn)的遍歷目錄函數(shù)示例

    這篇文章主要介紹了ES6實(shí)現(xiàn)的遍歷目錄函數(shù),涉及ES6文件目錄的遍歷、讀取、回調(diào)函數(shù)及json相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • 如何用前端html實(shí)現(xiàn)2024煙花效果

    如何用前端html實(shí)現(xiàn)2024煙花效果

    這篇文章主要給大家介紹了關(guān)于如何用前端html實(shí)現(xiàn)2024煙花效果的相關(guān)資料,文中介紹的是JavaScript代碼定義了煙花碎片和火箭類,通過(guò)動(dòng)畫循環(huán)模擬煙花爆炸效果,需要的朋友可以參考下
    2024-11-11

最新評(píng)論