这个问题是关于
为什么输出不同
不是如何才能实现正确的输出。
我无法理解为什么以下两个场景的输出不一样,即使我给JSON.parse()函数提供了相同的参数。
第一种情况
obj = {a:"asdf"};
var newObj = JSON.parse(JSON.stringify(obj)); //newObj = {a:"asdf"}
第二种情况
var newObj = JSON.parse("{"a":"asdf"}"); //this gives an error
答案 0 :(得分:3)
问题在于引号。
var newObj = JSON.parse('{"a":"asdf"}');
应该可以正常工作。
在Javascript中,我们使用引号(单引号或双引号)来表示String。如果要定义包含引号的String,则必须使用不同的引号,或使用反斜杠escape
字符\
引号。
var newObj = JSON.parse("{\"a\":\"asdf\"}");
也可以。
你可能会认为
var newObj = JSON.parse("{'a':'asdf'}");
可行,但不行。在JSON中,字符串仅使用双引号定义。
答案 1 :(得分:1)
为什么输出不同
因为输入不同。
第一种情况
obj = {a:"asdf"};
var newObj = JSON.parse(JSON.stringify(obj));
此处JSON.parse
的输入参数为JSON.stringify(obj)
,这是一个读取{"a":"asdf"}
的字符串。
第二种情况
var newObj = JSON.parse("{"a":"asdf"}");
此处JSON.parse
的输入参数是一个读取{
的字符串,其余部分是破解的代码。
出现混乱是因为控制台调试器决定应该在用"
封装的控制台上显示所有字符串,但这只是控制台告诉您该值为String类型的一种方式。它不会检查你是否“在里面并逃脱它们。
封装"
不是字符串的一部分,只是告诉它是一个字符串。
如果console.logging JSON.stringify(obj)让你"{"a":"asdf"}"
尝试做警告,或者是document.write。这些不会添加额外的"
,您会看到JSON.stringify(obj)的值实际上是{"a":"asdf"}
,而不是"{"a":"asdf"}"
。
<html><head></head><body>
<script>
function JSONparse(string) {
document.write(string);
alert(string);
console.log(string);
return JSON.parse(string);
}
var obj = {a:"asdf"};
result = JSONparse(JSON.stringify(obj));
</script>
</body></html>
答案 2 :(得分:0)
var newObj = JSON.parse('{"a":"asdf"}');