转化服务器端传回的JSON数据

讲讲JS的内置函数eval()的用法.
最初用到它是[color=blue]为了将后台传送过来的JSON格式的字符串转化为JSON对象[/color]。后来发现它的功能的确很强大,远不止这点,但今天只讲它。如果想深入了解可以参考下W3School。
进入正题:

<script>
var json='{"id":1}';
alert(json.id);
</script>

如果仔细看,可以发现,上面那段代码弹出的对话框是[color=blue]不能[/color]把id显示出来的。原因就是json只是个字符串对象而并不是真正的JSON对象,注意最外边那两个[color=blue]单引号[/color]。

<script>
var json={"id":1};//去掉单引号
alert(json.id);
</script>

去掉单引号,id就成功显示了。此时的json就是个JSON对象。

现在从服务器端传回的JSON数据就是像第一个例子那样带单引号的,是不能直接使用的。那怎么办呢?
答案就是开头提到的eval()函数。

<script>
var json='{"id":1}';
var jsonObj=eval("("+json+")");//注意这一行
alert(jsonObj.id);
</script>

id成功显示。
[color=indigo]注意两个要点[/color]:
1、json如果只是单个对象,而不是对象数组,如上例所示,则[color=red]不能[/color]直接写成eval(json).
2、不能把[color=blue]eval("("+json+")") [/color]写成[color=blue]eval('("+json+")'),[/color]否则id照样不会显示。

再举一例:

<script>
var json='[{"id":1}]';
var jsonObj=eval(json);
alert(jsonObj[0].id);
</script>

id照样能成功显示。注意区别:json包含的是一个对象数组,而非单个对象。但为什么这样就可以,而前面的例子却不可以,我就稀里糊涂了,还请大侠赐教。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值