我有一个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;
};
通过放置以下内容:
console.log({str:str, test: (str === 'null')})
在getParsed
的第一行,您将看到您的问题。
{str: 'null ', test: false}
所以你对这个函数的最后一次测试失败了,然后因为它没有;没有返回任何内容,您在最终对象中得到了一个undefined
值。
确保你去掉你的空间,它就会起作用:(