我需要返回null作为称为null的键的值,但它始终返回undefined

时间:2020-07-25 18:46:15

标签: javascript json parsing null key-value

我有一个parseJSON函数,该函数的结果应该与传递相同输入时调用JSON.parse的结果完全匹配。我有一个名为getParsed()的辅助函数,该函数将字符串解析为正确的类型。我的问题:

parseJSON('{"boolean, true": true, "boolean, false": false, "null": null }') //返回{boolean, true: true, boolean, false: false, null: undefined}

我需要最后一个属性返回为

null: null

为了匹配JSON.parse()的结果

我敢肯定,在这里我缺少关于null性质的一些信息,但是我找不到解决此问题的方法。下面的代码段(到目前为止,该函数仅处理对象文字)。

var getParsed = str => {
  // Check if string is a number. Checks for floating point and integer
  if (/^-?\d*\.?\d+$/.test(str)) {
    if (str.includes('.')) {
      return parseFloat(str);
    } else {
      return parseInt(str);
    }
  }
  // Check if string is surrounded by quotes, wwill remain a string.
  if (/"[^"]*()[^"]*"/.test(str)) {
    var arr = str.split('');
    arr.pop();
    arr.shift();
    return arr.join('');
  }
  // Check if string is boolean
  if (str === 'true') { return true; }
  if (str === 'false') { return false; }
  // Check if string is false
  if (str === 'null' || str === 'undefined') { return null; }
};



var parseJSON = function (json, invoked = false) {
  if (json.startsWith('{')) {
    var arr = json.split('');
    var first = arr.shift();
    var last = arr.pop();
    var props = arr.join('').split(', ');
    var res = {};

    for (var i = 0; i < props.length; i++) {
      if (!props[i].includes(':')) {
        props[i] = props[i] + ', ' + props[i + 1];
        props.splice(i + 1, 1);
      }
    }

    for (var i = 0; i < props.length; i++) {
      var prop = props[i].split(': ');
      var key = prop[0];
      var val = prop[1];

      if (key.includes('"')) {
        key = key.split('');
        key.shift();
        key.pop();
        key = key.join('');
        res[key] = getParsed(val);
      }
    }

    return res;
};

1 个答案:

答案 0 :(得分:0)

通过这样:

console.log({str:str, test: (str === 'null')})

getParsed的第一行,您将看到您的问题。

{str: 'null ', test: false}

因此您对该函数的最终测试失败了,然后由于没有返回任何内容,因此您在最终对象中获得了undefined值。

请确保您删除了空格,它会起作用:)

相关问题