Baseline Widely available *
éææ¹æ³ JSON.parse()
ç¨æ¥è§£æ JSON åç¬¦ä¸²ï¼æé ç±å符串æè¿°ç JavaScript å¼æå¯¹è±¡ãå¯ä»¥æä¾ä¸ä¸ªå¯éç reviver 彿°ï¼ç¨äºå¨è¿åç»æå¯¹è±¡ä¹å对å
¶è¿è¡è½¬æ¢ã
const json = '{"result":true, "count":42}';
const obj = JSON.parse(json);
console.log(obj.count);
// ææè¾åºï¼42
console.log(obj.result);
// ææè¾åºï¼true
è¯æ³
JSON.parse(text)
JSON.parse(text, reviver)
åæ°
text
è¦è¢«è§£ææ JavaScript å¼çå符串ï¼å
³äº JSON çè¯æ³æ ¼å¼ï¼è¯·åèï¼JSON
ã
reviver
å¯é
妿æ¯å½æ°ï¼åè§å®äºæåç±è§£æäº§ççæ¯ä¸ªå¼å¨è¿ååçè½¬æ¢æ¹å¼ãä¸å¯è°ç¨çå¼å°è¢«å¿½ç¥ãè°ç¨è¯¥å½æ°æ¶éè¦è¾å ¥ä»¥ä¸åæ°ï¼
key
ä¸å¼ç¸å ³çé®ã
value
è§£æäº§ççå¼ã
context
å¯é
ä¸ä¸æå¯¹è±¡ï¼ç¨äºä¿åä¸å½åæ£å¨æ¢å¤ç表达å¼ç¸å
³çç¶æãæ¯æ¬¡è°ç¨ reviver 彿°æ¶ï¼å®é½æ¯ä¸ä¸ªæ°å¯¹è±¡ãåªæå¨æ¢å¤åå§å¼æ¶æä¼ä¼ é该对象ï¼èå½ value
æ¯å¯¹è±¡ææ°ç»æ¶åä¸ä¼ä¼ éãå®å
å«ä»¥ä¸å±æ§ï¼
source
代表æ¤å¼çåå§ JSON å符串ã
ä¸ç»å®ç JSON text
ç¸å¯¹åºç Object
ãArray
ãstringãnumberãboolean æè
null
å¼ã
SyntaxError
è¥ä¼ å ¥çåç¬¦ä¸²ä¸æ¯åæ³ç JSONï¼åä¼æåºæ¤å¼å¸¸ã
JSON.parse()
伿 ¹æ® JSON è¯æ³è§£æ JSON å符串ï¼ç¶åå JavaScript 表达å¼ä¸æ ·å¯¹å符串è¿è¡æ±å¼ãåªæå¨å¤ç "__proto_"
鮿¶ï¼JSON ææ¬æä¼ä»£è¡¨ä¸ JavaScript 表达å¼ä¸åçå¼ï¼è¯·åè§å¯¹è±¡åé¢å¼ä¸ JSONã
妿æå®äº reviver
ï¼é£ä¹å¨è¿åä¹åï¼å°å¯¹è§£æè®¡ç®åºçå¼è¿è¡è½¬æ¢ãå
·ä½æ¥è¯´ï¼è®¡ç®å¼åå
¶ææå±æ§ï¼ä»¥æ·±åº¦ä¼å
çæ¹å¼ï¼ä»åµå¥æå¤ç屿§å¼å§ï¼ç´å°åå§å¼æ¬èº«ï¼é½ä¼å¨ reviver
ä¸åç¬è¿è¡ã
è°ç¨ reviver
æ¶ï¼å
å«è¢«å¤ç屿§ç对象å°ä½ä¸º this
ï¼é¤éå° reviver
å®ä¹ä¸ºç®å¤´å½æ°ï¼å¨è¿ç§æ
åµä¸æ²¡æåç¬ç this
ç»å®ï¼åä¸¤ä¸ªåæ°ï¼key
å value
ï¼åå«ä»£è¡¨å符串形å¼ç屿§åç§°ï¼å³ä½¿æ¯æ°ç»ï¼å屿§å¼ã对äºåå§å¼ï¼ä¼ä¼ éä¸ä¸ªé¢å¤ç context
åæ°ï¼å
¶ä¸å
å«è¯¥å¼çæºææ¬ã妿 reviver
彿°è¿å undefined
ï¼æä¸è¿åä»»ä½å¼ï¼ä¾å¦ï¼å¨å½æ°æ§è¡ç»ææ¶ï¼ï¼åä¼ä»å¯¹è±¡ä¸å é¤è¯¥å±æ§ãå¦åï¼å±æ§å°è¢«éæ°å®ä¹ä¸ºè¿åå¼ã妿 reviver
åªè½¬æ¢æäºå¼èä¸è½¬æ¢å
¶ä»å¼ï¼è¯·å¡å¿
æåæ ·è¿åæææªè½¬æ¢çå¼ï¼å¦åè¿äºå¼å°ä»çæç对象ä¸å é¤ã
ä¸ JSON.stringify()
ç replacer
åæ°ç±»ä¼¼ï¼å¯¹äºæ°ç»å对象ï¼reviver
æå䏿¬¡è°ç¨çæ¯ä»¥ç©ºå符串ä½ä¸º key
ãä»¥æ ¹å¯¹è±¡ä½ä¸º value
çæ ¹å¼ã对äºå
¶ä»ææç JSON å¼ï¼reviver
çå·¥ä½åç䏿¤ç±»ä¼¼ï¼å³è°ç¨ä¸æ¬¡ç©ºå符串ä½ä¸º key
ï¼å¼æ¬èº«ä½ä¸º value
ã
å¦æä» reviver
è¿åå¦ä¸ä¸ªå¼ï¼è¯¥å¼å°å®å
¨å代æåè§£æçå¼ãè¿çè³éç¨äºæ ¹å¼ãä¾å¦ï¼
const transformedObj1 = JSON.parse('[1,5,{"s":1}]', (key, value) =>
typeof value === "object" ? undefined : value,
);
console.log(transformedObj1); // undefined
æä»¬æ æ³éç¨å°è§£å³è¿ä¸ªé®é¢ãä½ æ æ³ä¸é¨å¤ç key
为空å符串çæ
åµï¼å 为 JSON 对象ä¹å¯è½å
å«ç©ºå符串çé®ãå¨å®ç° reviver æ¶ï¼éè¦é常精确å°ç¥éæ¯ä¸ªé®éè¦è¿è¡åªç§è½¬æ¢ã
请注æï¼reviver
æ¯å¨è§£ææ°å¼åè¿è¡çãå æ¤ï¼ä¸¾ä¾æ¥è¯´ï¼JSON ææ¬ä¸çæ°åå·²ç»è¢«è½¬æ¢ä¸º JavaScript æ°åï¼å¨æ¤è¿ç¨ä¸å¯è½ä¼ä¸¢å¤±ç²¾åº¦ãä¸ç§ä¸æå¤±ç²¾åº¦å°ä¼ è¾å¤§åæ°åçæ¹æ³æ¯å°å
¶åºåå为å符串ï¼ç¶åå°å
¶è¿å为 BigIntï¼æå
¶ä»éå½çä»»æç²¾åº¦æ ¼å¼ã
è¿å¯ä»¥ä½¿ç¨ context.source
屿§è®¿é®ä»£è¡¨å¼çåå§ JSON æºææ¬ï¼å¦ä¸æç¤ºï¼
const bigJSON = '{"gross_gdp": 12345678901234567890}';
const bigObj = JSON.parse(bigJSON, (key, value, context) => {
if (key === "gross_gdp") {
// 忽ç¥å¼ï¼å®å·²ç»æå¤±äºç²¾åº¦
return BigInt(context.source);
}
return value;
});
ç¤ºä¾ ä½¿ç¨ JSON.parse()
JSON.parse("{}"); // {}
JSON.parse("true"); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse("null"); // null
ä½¿ç¨ reviver
åæ°
JSON.parse(
'{"p": 5}',
(key, value) =>
typeof value === "number"
? value * 2 // 为æ°å¼è¿å value * 2
: value, // å
¶ä»å¼è¿ååå¼
);
// { p: 10 }
JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => {
console.log(key);
return value;
});
// 1
// 2
// 4
// 6
// 5
// 3
// ""
å¨ä¸ JSON.stringify() ç replacer é
对æ¶ä½¿ç¨ reviver
为äºä½¿ä¸ä¸ªå¼è½æ£ç¡®å°å¾è¿ï¼å³è¢«ååºåå为ç¸åçåå§å¯¹è±¡ï¼ï¼åºååè¿ç¨å¿
é¡»ä¿çç±»åä¿¡æ¯ãä¾å¦ï¼å¯ä»¥ä½¿ç¨ JSON.stringify()
ç replacer
åæ°æ¥å®ç°è¿ä¸ç®çï¼
// Map é常被åºåå为没æå±æ§ç对象ã
// æä»¬å¯ä»¥ä½¿ç¨æ¿æ¢å¨æ¥æå®è¦åºååçæ¡ç®ã
const map = new Map([
[1, "one"],
[2, "two"],
[3, "three"],
]);
const jsonText = JSON.stringify(map, (key, value) =>
value instanceof Map ? Array.from(value.entries()) : value,
);
console.log(jsonText);
// [[1,"one"],[2,"two"],[3,"three"]]
const map2 = JSON.parse(jsonText, (key, value) =>
Array.isArray(value) && value.every(Array.isArray) ? new Map(value) : value,
);
console.log(map2);
// Map { 1 => "one", 2 => "two", 3 => "three" }
ç±äº JSON æ²¡ææ³¨éç±»åå æ°æ®çè¯æ³ç©ºé´ï¼ä¸ºäºæ¢å¤é纯对象çå¼ï¼å¿ é¡»èè以䏿¹æ³ä¹ä¸ï¼
registry
ç屿§é½å
å« Map
对象ï¼ãå½ JSON.parse
æ¥æ¶å°ä¸ç¬¦å JSON è¯æ³çå符串æ¶ï¼å®ä¼æåºä¸ä¸ª SyntaxError
ã
æ°ç»åå¯¹è±¡å¨ JSON ä¸ä¸è½æå°¾ééå·ï¼
JSON.parse("[1, 2, 3, 4, ]");
// SyntaxError: Unexpected token ] in JSON at position 13
JSON.parse('{"foo": 1, }');
// SyntaxError: Unexpected token } in JSON at position 12
JSON åç¬¦ä¸²å¿ é¡»ç¨åå¼å·ï¼è䏿¯åå¼å·ï¼åéï¼
JSON.parse("{'foo': 1}");
// SyntaxError: Unexpected token ' in JSON at position 1
JSON.parse("'string'");
// SyntaxError: Unexpected token ' in JSON at position 0
妿è¦å¨ JavaScript å符串åé¢éä¸åå ¥ JSONï¼ååºä½¿ç¨åå¼å·å¯¹ JavaScript å符串åé¢éè¿è¡åéï¼æä½¿ç¨åå¼å·å¯¹ JSON å符串è¿è¡åéï¼
JSON.parse('{"foo": 1}'); // OK
JSON.parse("{\"foo\": 1}"); // OK
è§è æµè§å¨å
¼å®¹æ§ åè§
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