技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

15個JSON.stringify()參考示例

作者:admin    時間:2022-3-30 18:21:10    瀏覽:

JSON.stringify()方法將一個 JavaScript 對象或值轉(zhuǎn)換為 JSON 字符串。在轉(zhuǎn)換過程中,可能你會遇到一些意外問題,比如某些值在轉(zhuǎn)換前后發(fā)生了變化,為此,你需要特別注意,務(wù)必查看轉(zhuǎn)換后的字符串是否與自己的期望一致。

 15個JSON.stringify()參考示例

本文將提供15個JSON.stringify()示例,介紹JSON.stringify()的用法及注意問題。

在文章開始之前,你還可以參考下文,了解更多有關(guān)JSON.stringify()的知識。

使用 JSON.stringify() 方法

JSON.stringify({});                        // '{}'
JSON.stringify(true);                      // 'true'
JSON.stringify("foo");                     // '"foo"'
JSON.stringify([1, "false", false]);       // '[1,"false",false]'
JSON.stringify({ x: 5 });                  // '{"x":5}'

JSON.stringify({x: 5, y: 6});
// "{"x":5,"y":6}"

JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
// '[1,"false",false]'

JSON.stringify({x: undefined, y: Object, z: Symbol("")});
// '{}'

JSON.stringify([undefined, Object, Symbol("")]);
// '[null,null,null]'

JSON.stringify({[Symbol("foo")]: "foo"});
// '{}'

JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]);
// '{}'

JSON.stringify(
    {[Symbol.for("foo")]: "foo"},
    function (k, v) {
        if (typeof k === "symbol"){
            return "a symbol";
        }
    }
);


// undefined

// 不可枚舉的屬性默認(rèn)會被忽略:
JSON.stringify(
    Object.create(
        null,
        {
            x: { value: 'x', enumerable: false },
            y: { value: 'y', enumerable: true }
        }
    )
);

// "{"y":"y"}"

解釋

JSON.stringify()將值轉(zhuǎn)換為相應(yīng)的JSON格式,下面是轉(zhuǎn)換時要注意的問題:

1、轉(zhuǎn)換值如果有 toJSON() 方法,該方法定義什么值將被序列化。

2、非數(shù)組對象的屬性不能保證以特定的順序出現(xiàn)在序列化后的字符串中。

3、布爾值、數(shù)字、字符串的包裝對象在序列化過程中會自動轉(zhuǎn)換成對應(yīng)的原始值。

4、undefined、任意的函數(shù)以及 symbol 值,在序列化過程中會被忽略(出現(xiàn)在非數(shù)組對象的屬性值中時)或者被轉(zhuǎn)換成 null(出現(xiàn)在數(shù)組中時)。函數(shù)、undefined 被單獨(dú)轉(zhuǎn)換時,會返回 undefined,如JSON.stringify(function(){}) 或 JSON.stringify(undefined)。

5、對包含循環(huán)引用的對象(對象之間相互引用,形成無限循環(huán))執(zhí)行此方法,會拋出錯誤。

6、所有以 symbol 為屬性鍵的屬性都會被完全忽略掉。

7、Date 日期調(diào)用了 toJSON() 將其轉(zhuǎn)換為了 string 字符串(同Date.toISOString()),因此會被當(dāng)做字符串處理。

8、NaNInfinity 格式的數(shù)值及 null 都會被當(dāng)做 null。

9、其他類型的對象,包括 Map/Set/WeakMap/WeakSet,僅會序列化可枚舉的屬性。

toJSON 方法

如果一個被序列化的對象擁有 toJSON 方法,那么該 toJSON 方法就會覆蓋該對象默認(rèn)的序列化行為:不是該對象被序列化,而是調(diào)用 toJSON 方法后的返回值會被序列化,例如:

var obj = {
  foo: 'foo',
  toJSON: function () {
    return 'bar';
  }
};
JSON.stringify(obj);      // '"bar"'
JSON.stringify({x: obj}); // '{"x":"bar"}'

JSON.stringify用作 JavaScript

注意 JSON 不是 JavaScript 嚴(yán)格意義上的子集,在 JSON 中不需要省略兩條終線(Line separator 和 Paragraph separator),但在 JavaScript 中需要被省略。因此,如果 JSON 被用作 JSONP 時,下面方法可以使用:

function jsFriendlyJSONStringify (s) {
    return JSON.stringify(s).
        replace(/\u2028/g, '\\u2028').
        replace(/\u2029/g, '\\u2029');
}

var s = {
    a: String.fromCharCode(0x2028),
    b: String.fromCharCode(0x2029)
};
try {
    eval('(' + JSON.stringify(s) + ')');
} catch (e) {
    console.log(e); // "SyntaxError: unterminated string literal"
}

// No need for a catch
eval('(' + jsFriendlyJSONStringify(s) + ')');

// console.log in Firefox unescapes the Unicode if
//   logged to console, so we use alert
alert(jsFriendlyJSONStringify(s)); // {"a":"\u2028","b":"\u2029"}

總結(jié)

本文通過15個示例,介紹了JSON.stringify()的用法,以及轉(zhuǎn)換時要注意的問題,希望對大家有所幫助。

您可能對以下文章也感興趣

標(biāo)簽: JSON  JSON.stringify  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */