json传送数据,内容占空间较小,但是可读性较差。
最简单的json表达式为{'name':'jack'}跟java中的map类似,分为key,value.由于现在做的一个项目涉及到json的解析,这里我简单学习了一下json.
json的两种解析方式,一个是javascript自带api中的函数eval(),一个是jquery.parseJSON(),那么这两个方法有什么不同呢。
现在我们自定义一个简单的json模式对象:
var result1={'name':'jack','age':'23','work':'IT'};
自定义一个简单的方法,方法名自定义:function pjson(){
var str=eval(result1);
alert(str.name);
}跟预想的一样,弹出一个框,内容显示为jack.由于给予的json比较规范,所以通过以下方式也可以直接获取数据,function pjson1(){
alert(result1.name);}返回值仍为jack.
关于jQuery.parseJson对json的解析方式,如果这里采用result1那么会报错,使得json无法被解析,如图json2所示
我们需要将json进行修改,如将单引号改为双引号:
。var result2={"name":"jack","age":"23","work":"IT"};
然而还是会出错,错误信息如图:json3所示最后将json再次修改为如下所示
var result2='{"name":"jack","age":"23","work":"IT"}';
终于解析成功。这里也就留给我们一个问题,到底用那种方式进行json解析最为靠谱,也就是可以适合所有的json数据解析。这里如果还想采用pjson1方式获取数据已经不可能,因为整个result2已经被当作一个字符串。
那么我们如果用pjson()方式又是什么效果呢?试一下吧!var result2='{"name":"jack","age":"23","work":"IT"}';
function pjson(){
var str=eval(result2);
alert(str.name);
}其所报的错误为缺少分号:在这里我依稀记得需要在eval()方法中加入括号,但是是什么括号忘记了。这里试一下,没办法,总的理解事情的真相:
这个结果让我很诧异。
先添加一对大括号{}:var result2='{"name":"jack","age":"23","work":"IT"}';
function pjson(){
var str=eval("{"+result2+"}");
alert(str.name);
}出现异常,如图json5.png所示。添加一对[]括号:
var result2='{"name":"jack","age":"23","work":"IT"}';
function pjson(){
var str=eval("["+result2+"]");
alert(str.name);
}出现无定义的声明:如图json6.png很不情愿的添加一对小括号():
var result1={'name':'jack','age':'23','work':'IT'};
var result2='{"name":"jack","age":"23","work":"IT"}';
function pjson(){
var str=eval("("+result2+")");
alert(str.name);
}居然成功了,返回结果与需要的结果完全一致。
当我们为自己的成功感到自豪时一个问题又出现了,能不能用pjson解析result1中的数据呢。
答案居然是否定的,我们做了这么多无非就是希望能够找到一个能够解析所有json的一种方式,而此时抛出的异常居然是缺少‘]’。那我们该如何解决呢,肯定是有办法的,最后我认为给予result赋值时获取的事一个对象,该类型不是字符串,毕竟在json1方法中能够调用就证明了这点,result1的定义方式
倒有点类似枚举之类的。
最后我将result改为这样var result1="{'name':'jack','age':'23','work':'IT'}";
function pjson2(){
var str=jQuery.parseJSON(result1);
alert(str.name);
}出现错误,如图:这个错误我很少见到,个人认为所说的无效字符是指我的json格式不能被解析吧,可能jQuery.parseJSON()不能解析带单引号的json数据,
查看了一下API貌似也是这样说的,(英语水平有限,大意纯属猜测)。
仿照eval()的方式添加各种括号都没有成功,也从侧面证明着我的猜测。当服务器返回数据时我们很难把握它的格式,但是只要说json我们应该采用eval()方法去处理,
当然这里只是我根据小量信息做出的结论。
其实我们从服务器获取的数据保装一般如:{'name':'jack','age':'23','work':'IT'}但是跟上面我们自定义的result1不一样,
由于其本身为字符串形式,所以我们采用的方法不会出错,而result1输出返回的是一个object对象。只有给其添加“”号成为字符串才能被解析。
以下两种方式也都能成功:var result1="{name:'jack',age:'23',work:'IT'}";
var result2='{name:"jack",age:"23",work:"IT"}';
function pjson(){
str=eval("("+result2+")");
alert(str.name);
}其实现在有点迷惑,jquery.parseJSON()功能应该不会比eval()差,为什么在这里却出现上述问题呢?也许对jQuery.parseJSON而言,result1不符合标准。
将result1放到json解析器中查看爆出:json9.png这样的异常。
查阅很多资料上面的json格式key和value对象或字符串都是采用双引号"",也就是说var result2='{"name":"jack","age":"23","work":"IT"}';
才是标准的json.这里必须说明一下,个人还是推荐使用eval("("+data+")"),从我的从业生涯中遇到的json里面的数据都是单引号,也就是说jQuery.parseJSON根本无法解析。
最后祝各位工作顺利。