json字符串转化为json对象

这是web前端开发中经常使用到的一个知识点。譬如:前端可通过ajax获取后端数据。那么,这个获取的JSON数据(可能是JSON字符串)是如何在前端获得解析的呢?其实,解析JSON字符串过程就是将JSON字符串转化为JSON对象。下面,我们简单学习下这个JSON字符串的解析和使用过程。

 

首先,要了解什么是json对象。暂时可以简单的认为,json对象就是由[]{}组成的一种特殊的方便数据传输的数据格式。


假设,我们已通过jQuery的ajax方式获取了json字符串,需要将json数据循环地打印出来。(这种情形很常见)但json字符串无法直接输出啊,所以需要先转化为json对象。下面两种方式可以转化json对象。


使用JSON.parse()

适用于IE8+的一种方式。JSON.parse()可以将json字符串转化为json对象。与其相对的,还有一个叫做JSON.stringify()的函数,可以将json对象转化为json字符串。

var str='[{"name":"北京", "num": "0100"}, {"name":"上海", "num": "0101"}]'; //0100必须有双引号,否则报错
var json=JSON.parse(str);
json.forEach(function(item){
    alert(item.name);
})

 

使用eval()

ie8(兼容模式),ie7ie6没有JSON对象,但可以使用eval()将字符串转化为json对象。

var str='[{"name":"北京", "num": "0100"}, {"name":"上海", "num": "0101"}]';    json=eval("("+str+")"); //记得加()哦~~
json.forEach(function(item){
    alert(item.name);
})


这里大家可能会奇怪了,为何要加()呢,不加不是也能正常输出吗?在这里当然是可以的,但其他情况可能就不行了哦。比如:

str2='{"name":"xixi", "age":"12"}';
json=eval("("+str2+")");
alert(json);


这里如果我们不加就会报错。这是为什么呢?

因为json对象的开始结束标记是{},而在js中,{}代表语句块。eval函数又只能将表达式转化为json对象。所以,我们需要先将json字符串使用()转化为一个表达式,而非作为语法块处理。需要注意的一点,由于eval直接操作的是字符串代码,所以可能存在一些安全问题。

 

其实,对于服务器返回的json字符串,我们还可以使用一种更为简单且安全的方式。下面我们再介绍一种方式吧。

 

$.ajax()方法获得服务器返回

首先,实现简单后端api。新建一个post.php文件

<?php
$user1 = new stdClass();
$user1->name = "小明"; //家喻户晓
$user1->age = 12;
$arr[] = $user1;
 
$user2 = new stdClass();
$user2->name = "李华"; //国产经典
$user2->age = 15;
$arr[] = $user2;
 
echo json_encode($arr); //注意:不要使用vardump,否则会返回多了""的json字符串。
exit;


 

注:若非同源还需加上同源策略头,在php代码的最前面加上:

//指定其他域名访问
header('Access-Control-Allow-Origin:*');
//响应类型
header('Access-Control-Allow-methods:GET,POST');
header('Access-Control-Allow-Headers:x-requestd-with,content-type');


然后,前端通过$.ajax方式获取数据。

$(function(){
    $.ajax({
        url: "http://localhost:8080/three/post.php",
        dataType: "json",
        success: function(data){
            data.forEach(function(item){
                alert(item.name);
            });
        },
        error: function(){
            alert('请求失败或返回格式不正确!');
        }
    });
});


需要注意的一点是,若后台返回数据不对(譬如:输出结果多了空格或tab或不能完全符合json格式等),即使ajax请求返回的状态码是200,也无法进入success函数,因为200只是代表请求成功并返回了数据(你也不知道是正确的还是错误的数据),在进入success回调函数前,它还会根据dataType来检查返回数据格式是否完全符合。

 



以上便是json字符串转化为json对象的全部内容啦,希望对大家有帮助~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值