关于JavaScript中JSON的查询

关于JavaScript中JSON的查询,javascript,json,Javascript,Json,我一直在玩弄JSON,但我发现了一些我不太理解的东西,例如,我有一段代码: var str = "{'name':'vvv'}"; var cjson = eval ("(" + str + ")"); alert(cjson.name); 它工作得很好,但是使用这段代码 var str = "{'name':"+'vvv'+"}"; var cjson = eval ("(" + str + ")"); alert(cjson.name);

我一直在玩弄JSON,但我发现了一些我不太理解的东西,例如,我有一段代码:

var str = "{'name':'vvv'}";                    
var cjson = eval ("(" + str + ")");
alert(cjson.name);
它工作得很好,但是使用这段代码

var str = "{'name':"+'vvv'+"}";    
var cjson = eval ("(" + str + ")");
alert(cjson.name);
没有,我得到了以下firebug错误:ReferenceError:vvv未定义


为什么它不能与第二种方式一起工作,str在这两种情况下都不是有效的字符串吗?

它是一个字符串,是的。但不是相同的字符串,也不是有效的JSON

 var str = "{'name':" + 'vvv' + "}";
同:

 var str = "{'name':" + "vvv" + "}";
 var str = "{'name':vvv}";
这与:

 var str = "{'name':" + "vvv" + "}";
 var str = "{'name':vvv}";
当您尝试评估时,就好像您声明:

 var cjson = { 'name': vvv };

没有名为
vvv

的变量,是字符串。但不是相同的字符串,也不是有效的JSON

 var str = "{'name':" + 'vvv' + "}";
同:

 var str = "{'name':" + "vvv" + "}";
 var str = "{'name':vvv}";
这与:

 var str = "{'name':" + "vvv" + "}";
 var str = "{'name':vvv}";
当您尝试评估时,就好像您声明:

 var cjson = { 'name': vvv };

当您执行
var str=“{'name':“+'vvv'+”}”时,没有名为
vvv的变量
,生成的字符串是
“{'name':vvv}”
,其中
vvv
不是字符串文本。因此,eval将尝试在执行范围内解析它,因为在执行范围内找不到它,所以当您执行
var str=“{'name':“+'vvv'+“}”时,它会抛出一个错误
,生成的字符串是
“{'name':vvv}”
,其中
vvv
不是字符串文本。因此,eval将尝试在执行范围内解析它,因为在那里找不到它,它会抛出一个错误

,该错误不是有效的JSON,需要双引号。您需要在“vvv”周围添加引号,在字符串连接后,您会得到var str=“{name':vvv}”;您应该有类似var str=“{'name':”+“'vvv'”+“}”的内容;这不是有效的JSON,需要双引号。您需要在“vvv”周围添加引号,在字符串连接后,您会得到var str=“{name':vvv}”;您应该有类似var str=“{'name':”+“'vvv'”+“}”的内容;对于记录,有效的JSON应该是
var str='{“name”:“vvv”}'var str='{“name”:“vvv”}'