Baseline Widely available
JSON.stringify()
æ¹æ³å°ä¸ä¸ª JavaScript 对象æå¼è½¬æ¢ä¸º JSON å符串ï¼å¦ææå®äºä¸ä¸ª replacer 彿°ï¼åå¯ä»¥éæ©æ§å°æ¿æ¢å¼ï¼æè
æå®ç replacer æ¯æ°ç»ï¼åå¯éæ©æ§å°ä»
å
嫿°ç»æå®ç屿§ã
console.log(JSON.stringify({ x: 5, y: 6 }));
// Expected output: '{"x":5,"y":6}'
console.log(
JSON.stringify([new Number(3), new String("false"), new Boolean(false)]),
);
// Expected output: '[3,"false",false]'
console.log(JSON.stringify({ x: [10, undefined, function () {}, Symbol("")] }));
// Expected output: '{"x":[10,null,null,null]}'
console.log(JSON.stringify(new Date(2006, 0, 2, 15, 4, 5)));
// Expected output: '"2006-01-02T15:04:05.000Z"'
è¯æ³
JSON.stringify(value[, replacer [, space]])åæ°
value
å°è¦åºååæ ä¸ä¸ª JSON å符串çå¼ã
replacer
å¯é
å¦æè¯¥åæ°æ¯ä¸ä¸ªå½æ°ï¼åå¨åºååè¿ç¨ä¸ï¼è¢«åºååçå¼çæ¯ä¸ªå±æ§é½ä¼ç»è¿è¯¥å½æ°ç转æ¢åå¤çï¼å¦æè¯¥åæ°æ¯ä¸ä¸ªæ°ç»ï¼ååªæå å«å¨è¿ä¸ªæ°ç»ä¸ç屿§åæä¼è¢«åºååå°æç»ç JSON å符串ä¸ï¼å¦æè¯¥åæ°ä¸º null æè æªæä¾ï¼å对象ææç屿§é½ä¼è¢«åºååã
space
å¯é
æå®ç¼©è¿ç¨ç空ç½å符串ï¼ç¨äºç¾åè¾åºï¼pretty-printï¼ï¼å¦æåæ°æ¯ä¸ªæ°åï¼å®ä»£è¡¨æå¤å°çç©ºæ ¼ï¼ä¸é为 10ã该å¼è¥å°äº 1ï¼åæå³ç没æç©ºæ ¼ï¼å¦æè¯¥åæ°ä¸ºå符串ï¼å½å符串é¿åº¦è¶ è¿ 10 ä¸ªåæ¯ï¼åå ¶å 10 ä¸ªåæ¯ï¼ï¼è¯¥å符串å°è¢«ä½ä¸ºç©ºæ ¼ï¼å¦æè¯¥åæ°æ²¡ææä¾ï¼æè 为 nullï¼ï¼å°æ²¡æç©ºæ ¼ã
ä¸ä¸ªè¡¨ç¤ºç»å®å¼ç JSON å符串ã
å¼å¸¸TypeError
("cyclic object value")ï¼å¾ªç¯å¯¹è±¡å¼ï¼BigInt
ç±»åçå¼ä¼æåºTypeError
("BigInt value can't be serialized in JSON")ï¼BigInt å¼ä¸è½ JSON åºååï¼.JSON.stringify()
å°å¼è½¬æ¢ä¸ºç¸åºç JSON æ ¼å¼ï¼
undefined
ãä»»æç彿°ä»¥å symbol å¼ï¼å¨åºååè¿ç¨ä¸ä¼è¢«å¿½ç¥ï¼åºç°å¨éæ°ç»å¯¹è±¡ç屿§å¼ä¸æ¶ï¼æè
è¢«è½¬æ¢æ null
ï¼åºç°å¨æ°ç»ä¸æ¶ï¼ã彿°ãundefined 被åç¬è½¬æ¢æ¶ï¼ä¼è¿å undefinedï¼å¦JSON.stringify(function(){})
or JSON.stringify(undefined)
.replacer
åæ°ä¸å¼ºå¶æå®å
å«äºå®ä»¬ã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
// ä¸å¯æä¸¾ç屿§é»è®¤ä¼è¢«å¿½ç¥ï¼
JSON.stringify(
Object.create(null, {
x: { value: "x", enumerable: false },
y: { value: "y", enumerable: true },
}),
);
// "{"y":"y"}"
replacer
åæ°
replacer åæ°å¯ä»¥æ¯ä¸ä¸ªå½æ°æè ä¸ä¸ªæ°ç»ãä½ä¸ºå½æ°ï¼å®æä¸¤ä¸ªåæ°ï¼é®ï¼keyï¼åå¼ï¼valueï¼ï¼å®ä»¬é½ä¼è¢«åºååã
å¨å¼å§æ¶ï¼replacer
彿°ä¼è¢«ä¼ å
¥ä¸ä¸ªç©ºå符串ä½ä¸º key
å¼ï¼ä»£è¡¨çè¦è¢« stringify
çè¿ä¸ªå¯¹è±¡ãéåæ¯ä¸ªå¯¹è±¡ææ°ç»ä¸ç屿§ä¼è¢«ä¾æ¬¡ä¼ å
¥ã
彿°åºå½è¿å JSON å符串ä¸ç value, å¦ä¸æç¤ºï¼
Number
, è½¬æ¢æç¸åºçå符串ä½ä¸ºå±æ§å¼è¢«æ·»å å
¥ JSON å符串ãString
, 该å符串ä½ä¸ºå±æ§å¼è¢«æ·»å å
¥ JSON å符串ãBoolean
, "true" æè
"false" ä½ä¸ºå±æ§å¼è¢«æ·»å å
¥ JSON åç¬¦ä¸²ãæ³¨æï¼ ä¸è½ç¨ replacer æ¹æ³ï¼ä»æ°ç»ä¸ç§»é¤å¼ï¼valuesï¼ï¼å¦è¥è¿å undefined æè ä¸ä¸ªå½æ°ï¼å°ä¼è¢« null å代ã
ç¤ºä¾ (function)function replacer(key, value) { if (typeof value === "string") { return undefined; } return value; } var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7}; var jsonString = JSON.stringify(foo, replacer);
JSON åºååç»æä¸º {"week":45,"month":7}
.
妿 replacer
æ¯ä¸ä¸ªæ°ç»ï¼æ°ç»çå¼ä»£è¡¨å°è¢«åºååæ JSON å符串ç屿§åã
JSON.stringify(foo, ['week', 'month']); // '{"week":45,"month":7}', åªä¿çâweekâåâmonthâ屿§å¼ã
space
åæ°
space
åæ°ç¨æ¥æ§å¶ç»æå符串éé¢çé´è·ã妿æ¯ä¸ä¸ªæ°åï¼åå¨åç¬¦ä¸²åæ¶æ¯ä¸çº§å«ä¼æ¯ä¸ä¸çº§å«ç¼©è¿å¤è¿ä¸ªæ°åå¼çç©ºæ ¼ï¼æå¤ 10 ä¸ªç©ºæ ¼ï¼ï¼å¦ææ¯ä¸ä¸ªå符串ï¼åæ¯ä¸çº§å«ä¼æ¯ä¸ä¸çº§å«å¤ç¼©è¿è¯¥åç¬¦ä¸²ï¼æè¯¥å符串çå 10 个å符ï¼ã
JSON.stringify({ a: 2 }, null, " "); // '{\n "a": 2\n}'
使ç¨å¶è¡¨ç¬¦ï¼\tï¼æ¥ç¼©è¿ï¼
JSON.stringify({ uno: 1, dos: 2 }, null, "\t");
// '{ \
// "uno": 1, \
// "dos": 2 \
// }'
toJSON æ¹æ³
妿ä¸ä¸ªè¢«åºååçå¯¹è±¡æ¥æ toJSON
æ¹æ³ï¼é£ä¹è¯¥ toJSON
æ¹æ³å°±ä¼è¦ç该对象é»è®¤çåºååè¡ä¸ºï¼ä¸æ¯è¯¥å¯¹è±¡è¢«åºååï¼èæ¯è°ç¨ toJSON
æ¹æ³åçè¿åå¼ä¼è¢«åºååï¼ä¾å¦ï¼
var obj = {
foo: "foo",
toJSON: function () {
return "bar";
},
};
JSON.stringify(obj); // '"bar"'
JSON.stringify({ x: obj }); // '{"x":"bar"}'
å
³äºåºåå循ç¯å¼ç¨çé®é¢
ç±äº JSON æ ¼å¼ä¸æ¯æå¯¹è±¡å¼ç¨ï¼å°½ç®¡æä¸ä¸ª IETF èæ¡åå¨ï¼ï¼å¦æå°è¯ç¼ç 带æå¾ªç¯å¼ç¨ç对象ï¼å°ä¼æåº TypeError
å¼å¸¸ã
const circularReference = {};
circularReference.myself = circularReference;
// åºåå循ç¯å¼ç¨ä¼æåº "TypeError: cyclic object value" é误
JSON.stringify(circularReference);
è¦åºåå循ç¯å¼ç¨ï¼ä½ å¯ä»¥ä½¿ç¨æ¯æå¾ªç¯å¼ç¨çåºï¼ä¾å¦ Douglas Crockford ç cycle.jsï¼ï¼æè èªå·±å®ç°ä¸ä¸ªè§£å³æ¹æ¡ï¼è¿éè¦æ¾å°å¾ªç¯å¼ç¨ï¼å¹¶ç¨å¯åºååç弿¿æ¢ï¼æç§»é¤ï¼å®ä»¬ã
å¦æä½ å¨ä½¿ç¨ JSON.stringify()
æ¥æ·±æ·è´ä¸ä¸ªå¯¹è±¡ï¼ä½ å¯è½æ³è¦ä½¿ç¨ structuredClone()
ï¼å®æ¯æå¾ªç¯å¼ç¨ãJavaScript 弿çäºè¿å¶åºåå APIï¼æ¯å¦ v8.serialize()
ï¼ä¹æ¯æå¾ªç¯å¼ç¨ã
JSON.stringify
ç¨ä½ JavaScript
注æ JSON 䏿¯ JavaScript ä¸¥æ ¼æä¹ä¸çåéï¼å¨ 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"}ä½¿ç¨ JSON.stringify ç»å localStorage çä¾å
ä¸äºæ¶åï¼ä½ æ³åå¨ç¨æ·å建çä¸ä¸ªå¯¹è±¡ï¼å¹¶ä¸ï¼å³ä½¿å¨æµè§å¨è¢«å
³éåä»è½æ¢å¤è¯¥å¯¹è±¡ãä¸é¢çä¾åæ¯ JSON.stringify
éç¨äºè¿ç§æ
å½¢çä¸ä¸ªæ ·æ¿ï¼
// å建ä¸ä¸ªç¤ºä¾æ°æ®
var session = {
screens: [],
state: true,
};
session.screens.push({ name: "screenA", width: 450, height: 250 });
session.screens.push({ name: "screenB", width: 650, height: 350 });
session.screens.push({ name: "screenC", width: 750, height: 120 });
session.screens.push({ name: "screenD", width: 250, height: 60 });
session.screens.push({ name: "screenE", width: 390, height: 120 });
session.screens.push({ name: "screenF", width: 1240, height: 650 });
// ä½¿ç¨ JSON.stringify 转æ¢ä¸º JSON å符串
// ç¶åä½¿ç¨ localStorage ä¿åå¨ session åç§°é
localStorage.setItem("session", JSON.stringify(session));
// ç¶åæ¯å¦ä½è½¬æ¢éè¿ JSON.stringify çæçå符串ï¼è¯¥å符串以 JSON æ ¼å¼ä¿åå¨ localStorage é
var restoredSession = JSON.parse(localStorage.getItem("session"));
// ç°å¨ restoredSession å
å«äºä¿åå¨ localStorage éç对象
console.log(restoredSession);
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4