JSON.parse()
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
* Some parts of this feature may have varying levels of support.
JSON.parse() éçã¡ã½ããã¯ãæååã JSON ã¨ãã¦è§£æããæååã«ãã£ã¦è¨è¿°ããã¦ãã JavaScript ã®å¤ããªãã¸ã§ã¯ããæ§ç¯ãã¾ãããªãã·ã§ã³ã®ãªãã¤ãã¼é¢æ°ã§ãçæããããªãã¸ã§ã¯ããè¿ãããåã«å¤æãå®è¡ãããã¨ãã§ãã¾ãã
試ãã¦ã¿ã¾ããã
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-
JSON ã¨ãã¦è§£æããæååãJSON ã®æ§æã®èª¬æã¯
JSONãªãã¸ã§ã¯ããåç §ãã¦ãã ããã reviverçç¥å¯-
ãã颿°ã§ããå ´åãè§£æã«ããä½ãåºãããå ã®å¤ãããªãã¸ã§ã¯ããè¿ãåã«å¤æããæ¹æ³ãæç¤ºãã¾ãããã®é¢æ°ã¯ä»¥ä¸ã®å¼æ°ã§å¼ã³åºããã¾ãã
key-
ãã®å¤ã«é¢é£ä»ãããããã¼ã
value-
è§£éã§çæãããå¤ã
contextçç¥å¯-
ç¾å¨ã®å¼ã«é¢é£ããç¶æ ãä¿æããã³ã³ããã¹ããªãã¸ã§ã¯ãããªãã¤ãã¼é¢æ°ãå¼ã³åºããã³ã«æ°ãããªãã¸ã§ã¯ããçæããã¾ãããã®ãªãã¸ã§ã¯ãã¯ããªããã£ãå¤ã復活ãããå ´åã®ã¿æ¸¡ããã
valueããªãã¸ã§ã¯ããé åã®å ´åã¯æ¸¡ããã¾ããã以ä¸ã®ããããã£ãããã¾ããsource-
ãã®å¤ã表ãå ã® JSON æååã
è¿å¤
Object, Array, æåå, æ°å¤, è«çå¤, null å¤ã®ããããã§ãæå®ããã JSON ã® text ã«å¯¾å¿ããå¤ã§ãã
ä¾å¤
SyntaxError-
è§£æããæååãæå¹ãª JSON ã§ãªãå ´åã«çºçãã¾ãã
解説
JSON.parse() ã¯ã JSON ã®ææ³ã«å¾ã£ã¦ JSON æååãæ§æè§£æãã JavaScript å¼ã§ãããã®ããã«æååãè©ä¾¡ãã¾ãã JSON ããã¹ãã®ä¸é¨ããåã JavaScript å¼ã¨ç°ãªãå¤ã表ãå¯ä¸ã®ä¾ã¯ã "__proto__" ãã¼ãæ±ãå ´åã§ãããªãã¸ã§ã¯ããªãã©ã«æ§æ vs. JSON ãåç
§ãã¦ãã ããã
reviver 弿°
reviver ãæå®ããã¨ãæ§æè§£æã§è¨ç®ãããå¤ã夿ãã¦ããè¿ãã¾ããå
·ä½çã«ã¯ãè¨ç®ãããå¤ã¨ãã®ãã¹ã¦ã®ããããã£ï¼æã奥ã«ãªã£ãããããã£ãããå
ã®å¤èªèº«ã¸ã¨æ·±ãåªå
ã§ï¼ãåå¥ã«ãªãã¤ãã¼ã«å®è¡ããã¾ãã
reviver ã¯ãå¦ç対象ã®ããããã£ãå«ããªãã¸ã§ã¯ãã this ã¨ãã¦ï¼ã¢ãã¼é¢æ°ã¨ã㦠reviver ãå®ç¾©ããªãéããå¥åã® this ãã¤ã³ãã£ã³ã°ã¯ããã¾ããï¼ã key 㨠value ã® 2 ã¤ã®å¼æ°ãæå®ãã¦å¼ã³åºããã¾ãããããã¯ãããããæååã¨ãã¦ã®ããããã£åï¼é
åã®å ´åãåæ§ï¼ã¨ããããã£å¤ã表ãã¾ããããªããã£ãå¤ã®å ´åã¯ãããã« context 弿°ã渡ããããã®å¼æ°ã«ã¯ãã®å¤ã®ã½ã¼ã¹ããã¹ããæ ¼ç´ããã¾ãã reviver 颿°ã undefined ãè¿ããå ´åï¼ã¾ãã¯è¿å¤ããªãå ´åãä¾ãã°ã颿°ã®çµããã§å®è¡ãæ¢ã¾ã£ã¦ãã¾ã£ãå ´åãªã©ï¼ãããããã£ã¯ãªãã¸ã§ã¯ãããåé¤ããã¾ãããã以å¤ã®å ´åãããããã£ã¯è¿å¤ãè¿ãããã«åå®ç¾©ããã¾ãããã reviver ãããå¤ã ãã夿ããä»ã®å¤ã夿ããªãå ´åã¯ã夿ãããªãå¤ããã¹ã¦ãã®ã¾ã¾è¿ãããã«ãã¦ãã ããã
JSON.stringify() ã® replacer 弿°ã¨åæ§ã«ãé
åããªãã¸ã§ã¯ãã®å ´åã reviver ã¯ç©ºæååã key ã¨ããã«ã¼ããªãã¸ã§ã¯ãã value ã¨ãã¦ãã«ã¼ãå¤ã«å¯¾ãã¦æå¾ã«å¼ã³åºããã¾ããä»ã«ãæå¹ãª JSON å¤ãããå ´åã reviver ã¯åæ§ã«åä½ãã空æååã key ã¨ããå¤ãã®ãã®ã value ã¨ãã¦ä¸åº¦ã ãå¼ã³åºããã¾ãã
reviver ããå¥ã®å¤ãè¿ãã¨ãå
ã
è§£éã§ããå¤ã¯ãã®å¤ã«ãã£ã¦å®å
¨ã«ç½®ãæãã¾ããããã¯ã«ã¼ãå¤ã«ãé©ç¨ããã¾ããä¾ãã°ããã®ããã«ãªãã¾ãã
const transformedObj = JSON.parse('[1,5,{"s":1}]', (key, value) =>
typeof value === "object" ? undefined : value,
);
console.log(transformedObj); // undefined
ä¸è¬çã«ãããåé¿ããæ¹æ³ã¯ããã¾ãããJSON ãªãã¸ã§ã¯ãã«ã¯ç©ºæååã®ãã¼ãæ ¼ç´ãããã¨ãã§ããããããã¼ã空æååã®å ´åãç¹å¥ã«å¦çãããã¨ã¯ã§ãã¾ããããªãã¤ãã¼ãå®è£ ããéã«ã¯ãããããã®ãã¼ã«å¯¾ãã¦ã©ã®ãããªå¤æãå¿ è¦ããã¨ã¦ãæ£ç¢ºã«ç¥ãå¿ è¦ãããã¾ãã
reviver ã¯å¤ãè§£éãããå¾ã«å®è¡ããããã¨ã«æ³¨æãã¦ãã ããããã®ãããä¾ãã° JSON ããã¹ãã§ã®æ°å¤ã¯æ¢ã« JavaScript ã®æ°å¤ã«å¤æããã¦ããããã®éç¨ã§ç²¾åº¦ã失ããã¨ãããã¾ãã精度ã失ããã¨ãªã大ããªæ°å¤ã夿ãã 1 ã¤ã®æ¹æ³ã¯ãæååã¨ãã¦ã·ãªã¢ã©ã¤ãºããé·æ´æ°åããä»ã«ãé©åãªä»»æã®ç²¾åº¦å½¢å¼ã«å¾©æ´»ããããã¨ã§ãã
ä¸è¨ã®éãã 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 // æ°å¤ãªãã°å¤ã® 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() ã®ãªãã¬ã¤ãµã¼ã¨å¯¾ã«ãªããªãã¤ãã¼ã®ä½¿ç¨
å¤ãæ£ãã丸ããï¼ã¤ã¾ããåãå
ã®ãªãã¸ã§ã¯ãã¸ã·ãªã¢ã©ã¤ãºè§£é¤ããï¼ããã«ã¯ãã·ãªã¢ã©ã¤ãºå¦çã§åæ
å ±ãä¿æããå¿
è¦ãããã¾ããä¾ãã°ããã®ããã« 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 ã«ã¯åã¡ã¿ãã¼ã¿ãè¨ãããã®æ§æç©ºéããªãããããã¬ã¼ã³ãªãªãã¸ã§ã¯ãã§ã¯ãªãå¤ã復活ãããã«ã¯ã以ä¸ã®ãããããèæ ®ããå¿ è¦ãããã¾ãï¼
- ãªãã¸ã§ã¯ãå ¨ä½ãæååã«ã·ãªã¢ã©ã¤ãºããæ¥é è¾ã«åã¿ã°ãä»ããæ¹æ³ã
- ãã¼ã¿ã®æ§é ã«åºã¥ãã¦ãæ¨æ¸¬ãããï¼ä¾ãã°ã 2 ã¤ã®ã¡ã³ãã¼ãããªãé åï¼ã
- æ¬ä½ã®å½¢ãå®åã§ããå ´åãããããã£åããæ¨æ¸¬ããï¼ä¾ãã°ã
registryã¨å¼ã°ããããããã£ã¯ãã¹ã¦Mapãªãã¸ã§ã¯ããä¿æãã¦ãããªã©ï¼ã
䏿£ãª JSON
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
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-json.parse> |