为什么eval()不能在这里反序列化这样一个简单的JSON对象?

时间:2010-06-20 12:31:29

标签: json eval javascript

我正在尝试使用eval()函数通过使用eval函数反序列化此JSON文本。

  var personJSON = {"FirstName":"Burak","LastName":"Ozdogan","Id":"001"
,"Department":"Information Technologies"};

  var personBurakOzdogan = eval('(' + personJSON + ')');    

但是我收到了这个错误:

*Microsoft JScript compilation error: Expected ']'*

我跳过哪些东西是我无法捕捉到的?

由于

4 个答案:

答案 0 :(得分:5)

你拥有的不是JSON文本。它已经是一个JSON对象。因此,您根本不需要使用eval。您可以直接访问和操作其属性:

alert(personJSON.FirstName);

答案 1 :(得分:2)

尝试检查你的personJSON是否是包含真实json的包装器。例如,尝试写:

var person = eval('(' + personJSON.Person + ')')

其中Person是服务序列化的类。

OR

试试这个:

var person = eval('(' + personJSON.GetPersonResult + ')')

其中GetPerson是服务中的方法名称,加上Result

答案 2 :(得分:1)

你没有处理字符串,而是使用json对象。您正在尝试将json对象评估为字符串以创建json对象。

var personJSON = 
'{"FirstName":"Burak","LastName":"Ozdogan","Id":"001","Department":"Information Technologies"}';

var personBurakOzdogan = eval('(' + personJSON + ')');   

这应该有效,尽管它没有多大意义。这更有意义:

  var personBurakOzdogan = {"FirstName":"Burak","LastName":"Ozdogan","Id":"001","Department":"Information Technologies"};

答案 3 :(得分:0)

您必须将变量作为字符串类型传递给下面的代码:

var personJSON = '{"FirstName":"Burak","LastName":"Ozdogan","Id":"001","Department":"Information Technologies"}';