JSON
åºçº¿
广æ³å¯ç¨
*
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
JSON å½å空é´å¯¹è±¡å
å«ç¨äºè§£æ JavaScript 对象表示æ³ï¼JSONï¼åå°å¼è½¬æ¢ä¸º JSON å符串çéææ¹æ³ã
æè¿°
ä¸å¤§å¤æ°å
¨å±å¯¹è±¡ä¸åï¼JSON 䏿¯ä¸ä¸ªæé 彿°ãä¸è½å°å®ä¸ new è¿ç®ç¬¦ ä¸èµ·ä½¿ç¨ï¼ä¹ä¸è½å° JSON 对象ä½ä¸ºå½æ°è°ç¨ãJSON` çææå±æ§åæ¹æ³é½æ¯éæçï¼å°±å Math å¯¹è±¡ä¸æ ·ï¼ã
JavaScript ä¸ JSON çåºå«
JSON æ¯ä¸ç§è¯æ³ï¼ç¨æ¥åºååå¯¹è±¡ãæ°ç»ãæ°å¼ãå符串ãå¸å°å¼å nullãå®åºäº JavaScript è¯æ³ï¼ä½ä¸ä¹ä¸åï¼å¤§é¨å JavaScript 䏿¯ JSONãä¾å¦ï¼
- å¯¹è±¡åæ°ç»
-
屿§åç§°å¿ é¡»æ¯åå¼å·æ¬èµ·æ¥çå符串ï¼ç¦æ¢åºç°å°¾ééå·ã
- æ°å¼
-
ç¦æ¢åºç°å导é¶ãå°æ°ç¹åå¿ é¡»è³å°æä¸ä½æ°åã䏿¯æ
NaNåInfinityã
ä»»ä½ JSON ææ¬é½æ¯ææç JavaScript 表达å¼ï¼ä½ä»
éäº JSON è¶
é修订ä¹åãå¨ä¿®è®¢ä¹åï¼U+2028 è¡åé符å U+2029 段åé符å
è®¸å¨ JSON çå符串åé¢éå屿§é®ä¸ä½¿ç¨ï¼ä½å¨ JavaScript å符串åé¢éä¸ä½¿ç¨åæ ·çåé符ä¼å¯¼è´ SyntaxErrorã
å
¶ä»åºå«å
æ¬åªå
许åå¼å·å符串ï¼ä¸æ¯æ undefined ææ³¨éã对äºå¸æä½¿ç¨åºäº JSON çæ´äººæ§åé
ç½®æ ¼å¼çç¨æ·ï¼æ Babel ç¼è¯å¨ä½¿ç¨ç JSON5ï¼ä»¥åæ´å¸¸ç¨ç YAMLã
å¨ JavaScript 对象åé¢éä¸ JSON ä¸ï¼ç¸åçææ¬å¯è½ä»£è¡¨ä¸åçå¼ãå¦éäºè§£æ´å¤ä¿¡æ¯ï¼è¯·åé 对象åé¢éè¯æ³ä¸ JSON ç对æ¯ã
宿´ç JSON è¯æ³
ææç JSON è¯æ³ç±ä»¥ä¸è¯æ³æ£å¼å®ä¹ï¼è¯¥è¯æ³ç¨ ABNF è¡¨ç¤ºï¼æèª IETF JSON æ åï¼RFCï¼ï¼
JSON-text = object / array
begin-array = ws %x5B ws ; [ å·¦æ¹æ¬å·
begin-object = ws %x7B ws ; { 左大æ¬å·
end-array = ws %x5D ws ; ] 峿¹æ¬å·
end-object = ws %x7D ws ; } å³å¤§æ¬å·
name-separator = ws %x3A ws ; : åå·
value-separator = ws %x2C ws ; , éå·
ws = *(
%x20 / ; ç©ºæ ¼
%x09 / ; åç´å¶è¡¨ç¬¦
%x0A / ; æ¢è¡ç¬¦
%x0D ; å车符
)
value = false / null / true / object / array / number / string
false = %x66.61.6c.73.65 ; false
null = %x6e.75.6c.6c ; null
true = %x74.72.75.65 ; true
object = begin-object [ member *( value-separator member ) ]
end-object
member = string name-separator value
array = begin-array [ value *( value-separator value ) ] end-array
number = [ minus ] int [ frac ] [ exp ]
decimal-point = %x2E ; .
digit1-9 = %x31-39 ; 1-9
e = %x65 / %x45 ; e E
exp = e [ minus / plus ] 1*DIGIT
frac = decimal-point 1*DIGIT
int = zero / ( digit1-9 *DIGIT )
minus = %x2D ; -
plus = %x2B ; +
zero = %x30 ; 0
string = quotation-mark *char quotation-mark
char = unescaped /
escape (
%x22 / ; " å¼å· U+0022
%x5C / ; \ åææ U+005C
%x2F / ; / æ£ææ U+002F
%x62 / ; b éæ ¼ç¬¦ U+0008
%x66 / ; f æ¢é¡µç¬¦ U+000C
%x6E / ; n æ¢è¡ç¬¦ U+000A
%x72 / ; r å车符 U+000D
%x74 / ; t å¶è¡¨ç¬¦ U+0009
%x75 4HEXDIG ) ; uXXXX U+XXXX
escape = %x5C ; \
quotation-mark = %x22 ; "
unescaped = %x20-21 / %x23-5B / %x5D-10FFFF
HEXDIG = DIGIT / %x41-46 / %x61-66 ; 0-9, A-F, or a-f
; HEXDIG çæäº [RFC5234] ä¸ç HEXDIG è§å
DIGIT = %x30-39 ; 0-9
; DIGIT çæäº [RFC5234] ç DIGIT è§å
æ å
³ç´§è¦ç空ç½ç¬¦å¯ä»¥åºç°å¨ä»»ä½å°æ¹ï¼ä½ä¸å
æ¬å¨ JSONNumberï¼æ°åä¸å¾å
å«ç©ºç½ï¼æ JSONStringï¼å符串ä¸çç¸åºå符ä¼è¢«è§£é为空ç½ï¼å¦åä¼å¯¼è´é误ï¼ä¸ãå¶è¡¨ç¬¦ï¼U+0009ï¼ãå车符ï¼U+000Dï¼ãæ¢è¡ç¬¦ï¼U+000Aï¼åç©ºæ ¼ï¼U+0020ï¼å符æ¯å¯ä¸ææç空ç½å符ã
éæå±æ§
JSON[Symbol.toStringTag]-
[Symbol.toStringTag]屿§çåå§å¼ä¸ºå符串"JSON"ãè¯¥å±æ§å¨Object.prototype.toString()ä¸ä½¿ç¨ã
éææ¹æ³
JSON.parse()-
è§£æ JSON å符串并è¿å对åºçå¼ï¼å¯ä»¥é¢å¤ä¼ å ¥ä¸ä¸ªè½¬æ¢å½æ°ï¼ç¨æ¥å°çæçå¼åå ¶å±æ§ï¼å¨è¿åä¹åè¿è¡æäºä¿®æ¹ã
JSON.stringify()-
è¿å䏿å®å¼å¯¹åºç JSON å符串ï¼å¯ä»¥éè¿é¢å¤çåæ°ï¼æ§å¶ä» å 嫿äºå±æ§ï¼æè 以èªå®ä¹æ¹æ³æ¥æ¿æ¢æäºå±æ§å¼ã
示ä¾
>ç¤ºä¾ JSON
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
ä½ å¯ä»¥ä½¿ç¨ JSON.parse() æ¹æ³å°ä¸è¿° JSON å符串转å为 JavaScript 对象ï¼
const jsonText = `{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}`;
console.log(JSON.parse(jsonText));
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification > # sec-json-object > |