どのようにJSON.parseを実現しますか?JSON.parseを書きます.
1842 ワード
JSON.parse()
方法はJSON文字列を解析し、文字列によって記述されるJavaScript値またはオブジェクトを作成します.任意のreviver関数を提供して、その結果得られたオブジェクトを返す前に変換(操作)を実行します.構文
JSON.parse(text[, reviver])
パラメータtext
JavaScript値に解析される文字列は、JSONの文法形式について参照してください. JSON
reviver
オプション変換器は、このパラメータ(関数)が入ってくると、解析生成の元の値を変更するために使用されてもよく、パース関数が戻る前にタイミングを呼び出す.
戻り値
Object
タイプで、与えられたJSONテキストのオブジェクト/値に対応する.// 1. eval
function jsonParse (opt) {
return eval(`(${opt})`);
}
jsonParse(JSON.stringify({ x: 5 }))
// Object { x: 5}
jsonParse(JSON.stringify([1, "false", false]))
// [1, "false", false]
jsonParse(JSON.stringify({ b: undefined }))
// {}
/**
eval,eval() , 。 eval() ( ) , / , 。
*/
/**
JS , XSS 。
, json 。
*/
function jsonParse (json) {
var rx_one = /^[\],:{}\s]*$/;
var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
var rx_three = /"[^"\\
\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
if (rx_one.test(json.replace(rx_two, "@").replace(rx_three, "]").replace(rx_four, ""))) {
return eval(`(${json})`);
}
}
//2. Function
/**
eval() new Function()
: Function eval 。
*/
var func= new Function(arg1,arg2,...,functionBody);
// JSON , 。
var jsonStr = '{ "age": 20, "name": "jack" }';
var json = (new Function('return ' + jsonStr))();
eval
を選択します Function
すべて動的にjsコードをコンパイルする役割を持っていますが、実際のプログラミングでは推奨されていません.面接向けのプログラミングです.この二つを書けばいいです.第三、第四種は、煩雑な再帰と状態機関連の原理に関連しています.
『JSON.parse 3つの実現方式』