2015-11-23 23 views
1

我想创建一个解析JSON文本的函数。 创建一个不带JSON解析器的解析器

function JSONParser(string) { 
 
    //CODE HERE 
 
    string = string.replace(/"/g, ""); 
 

 
    var obj = {}; 
 
    obj[0] = string; 
 
    string = obj[0].replace(/'/g, ""); 
 

 
    return string; 
 
}

我只是做与对象的时髦的事情,因为.replace似乎并没有直接对字符串工作第二次。

当我通过检查器运行此代码。我得到...

JSONParser(JSON.stringify(true)); 
 
"true"

我的目标返回布尔真,而不是一个字符串。

有谁知道我为什么仍然用双引号得到回报?是否有更多的改变一个字符串对象比删除引号?或者,我只是试图不正确地删除它们?

任何帮助将不胜感激。 TIA

-Lea

回答

2

因为它仍然是一个字符串,所以控制台带有引号(如饰)显示。

请记住,当你做var foo = "true"时,引号实际上并不是字符串的一部分,所以不需要删除它们。您的控制台只是将它们显示为指示它显示的数据类型的一种方式。他们实际上并不存在。

如果你想要一个布尔值,你可以做这样的事情:

function JSONParser(string) { 
 
    return string === "true" ? true : 
 
     string === "false" ? false : string; 
 
} 
 

 
console.log(JSONParser(JSON.stringify(true)));

如果字符串既不是"true"也不"false",它只是返回原始字符串。


如果你喜欢if语句,则:

function JSONParser(string) { 
 
    if (string === "true") { 
 
    return true; 
 
    } else if (string === "false") { 
 
    return false; 
 
    } else { 
 
    return string; 
 
    } 
 
} 
 

 
console.log(JSONParser(JSON.stringify(true)));

还是一个switch声明将是有用的。