最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js中的bigint類型轉(zhuǎn)化為json字符串時報無法序列化的問題

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

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

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]); // 遞歸處理嵌套對象
          }
      }
  }
  return value;
}
import objReplacer from "src/utils/bingintToString"
JSON.stringify(res,objReplacer)

擴展

JavaScript JSON序列化和反序列化

概述

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

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

序列化

方式一:JSON.stringify()

語法

JSON.stringify(value, replacer, space)

說明

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

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

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

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

  • 如果參數(shù)是個數(shù)字,則代表有多少個空格,上限值為10;
  • 如果該參數(shù)的值小于1,則意味著沒有空格;
  • 如果參數(shù)為字符串,則取字符串的前十個字符作為空格;
  • 如果沒有傳入?yún)?shù)或者傳入的值為null,將沒有空格。
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個參數(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個參數(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

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

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

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}

序列化順序

序列化處理的順序如下:

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

反序列化

方式一:JSON.parse()

語法

JSON.parse(text, reviver)

說明

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

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

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

僅一個參數(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個參數(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ù)用于計算JavaScript字符串,并把它作為腳本來執(zhí)行。

語法

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

說明

這里為什么要使用括號將拼接出來的字符串括起來呢?

因為JSON字符串是以“{}”表示開始和結(jié)束,在JavaScript中它會被當作一個語句塊來處理,所以必須強制將它處理成一個表達式,所以采用括號。

使用

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

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

相關文章

  • 使用JavaScript構(gòu)建一個動態(tài)交互式圖表

    使用JavaScript構(gòu)建一個動態(tài)交互式圖表

    在Web開發(fā)中,JavaScript不僅是實現(xiàn)交互效果的關鍵,還可以用于構(gòu)建復雜的可視化組件,如動態(tài)交互式圖表,下面我們就來看看如何構(gòu)建一個動態(tài)交互式圖表吧
    2024-02-02
  • JavaScript事件委托實現(xiàn)原理及優(yōu)點進行

    JavaScript事件委托實現(xiàn)原理及優(yōu)點進行

    這篇文章主要介紹了JavaScript事件委托實現(xiàn)原理及優(yōu)點進行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 微信小程序使用onreachBottom實現(xiàn)頁面觸底加載及分頁效果

    微信小程序使用onreachBottom實現(xiàn)頁面觸底加載及分頁效果

    小程序還沒有使用pc端的那種分頁格式,下面這篇文章主要給大家介紹了關于微信小程序使用onreachBottom實現(xiàn)頁面觸底加載及分頁效果的相關資料,需要的朋友可以參考下
    2022-10-10
  • js文件Cookie存取值示例代碼

    js文件Cookie存取值示例代碼

    這篇文章主要介紹了js文件Cookie存取值的使用,需要的朋友可以參考下
    2014-02-02
  • 基于javascript實現(xiàn)圖片懶加載

    基于javascript實現(xiàn)圖片懶加載

    這篇文章主要介紹了javascript實現(xiàn)圖片懶加載的方法及思路,有時我們需要用懶加載,也就是延遲加載圖片的方式,來提高網(wǎng)站的親和力,需要的朋友可以參考下
    2016-01-01
  • 基于JavaScript代碼實現(xiàn)pc與手機之間的跳轉(zhuǎn)

    基于JavaScript代碼實現(xiàn)pc與手機之間的跳轉(zhuǎn)

    本文通過一段代碼實例給大家介紹pc跳轉(zhuǎn)手機代碼,手機跳轉(zhuǎn)pc網(wǎng)站代碼的相關知識,對js跳轉(zhuǎn)代碼相關知識感興趣的朋友一起通過本篇文章學習吧
    2015-12-12
  • 細說JavaScript中的this指向與綁定規(guī)則

    細說JavaScript中的this指向與綁定規(guī)則

    本文主要詳細介紹了JavaScript中的this指向與綁定規(guī)則,默認綁定,隱式綁定,顯示綁定,new綁定這四個規(guī)則,文中有相關的代碼示例供大家參考,感興趣的同學可以閱讀下
    2023-05-05
  • js實現(xiàn)樓層效果的簡單實例

    js實現(xiàn)樓層效果的簡單實例

    下面小編就為大家?guī)硪黄猨s實現(xiàn)樓層效果的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • js實現(xiàn)簡單模態(tài)窗口,背景灰顯

    js實現(xiàn)簡單模態(tài)窗口,背景灰顯

    昨天中午做項目需要一個模態(tài)窗口,想起上一個公司的項目經(jīng)理曾經(jīng)做過一個比較牛的模態(tài)窗口,至今沒用搞清楚實現(xiàn)原理,平時也沒有時間去分析,試著自己做了一個,用了一天的時間終于完成了,給大家一起分享, 也希望高手多提意見。第一次在博客園上發(fā)文章,挺高興的。
    2008-11-11
  • JavaScript將取代AppleScript?

    JavaScript將取代AppleScript?

    這篇文章主要介紹了JavaScript將取代AppleScript?AppleScript是OS X平臺的類似JavaScript的腳本語言,需要的朋友可以參考下
    2014-09-09

最新評論

本溪市| 航空| 四子王旗| 乳山市| 康马县| 岐山县| 剑川县| 枣庄市| 开原市| 彩票| 大竹县| 嘉兴市| 石阡县| 盱眙县| 黎平县| 外汇| 周口市| 曲阜市| 宁化县| 湖南省| 文登市| 大渡口区| 邳州市| 佛学| 区。| 慈溪市| 克什克腾旗| 高雄市| 肃宁县| 凤翔县| 崇左市| 武城县| 杭锦后旗| 海城市| 马关县| 合阳县| 都兰县| 灵璧县| 五常市| 龙井市| 桃源县|