首页 > 解决方案 > 如何强制 JSON.parse 抛出数字?

问题描述

我刚刚发现 JSON 可以将数字和字符串作为原始处理。我非常想知道为什么,因为我从未见过将原语与 JSON 一起使用。

但是,对我来说,使用 JSON 解析原语更可能是一个编程错误(不会被注意到),我想避免它。

例如,我可以强制以下内容抛出吗?

JSON.parse(123);

规格:https ://www.json.org/json-en.html

标签: javascriptnode.jsjson

解决方案


您可以在反序列化之前包装parse函数并检查number参数。

(() => {
  const parse = JSON.parse;
  JSON.parse = function (text,reviver) {
    if (typeof text === "number") throw "JSON.parse: Invalid argument type (number)";
    return parse(text,reviver);
  }
})();

console.log( JSON.parse(`{"prop":"Hello world!"}`) );  //OK
console.log( JSON.parse(123) );                        //NOT OK


推荐阅读