どのようにJSON.parseを実現しますか?JSON.parseを書きます.


JSON.parse() 方法はJSON文字列を解析し、文字列によって記述されるJavaScript値またはオブジェクトを作成します.任意のreviver関数を提供して、その結果得られたオブジェクトを返す前に変換(操作)を実行します.
構文
JSON.parse(text[, reviver])
パラメータtextJavaScript値に解析される文字列は、JSONの文法形式について参照してください.  JSONreviver オプション
変換器は、このパラメータ(関数)が入ってくると、解析生成の元の値を変更するために使用されてもよく、パース関数が戻る前にタイミングを呼び出す.
戻り値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つの実現方式』