json:
链接:http://tiankonguse.com/record/record.php?id=302
链接:http://www.cnblogs.com/linda586586/archive/2012/04/17/2454212.html
链接:http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html
一、JSON值可以是:
l 数字(整数或浮点数)
l 字符串(两边都在双引号中,必须是双引号,不能是单引号)
l 逻辑值(true 或 false)
l 数组(在方括号中)
l 对象(在花括号中)
l null
要注意,我们写对象的时候一般可以{name:'xskow'},即属性名可以不用双引号括起来但JSON有非常严格的语法,如果属性是字符串,那必须用双引号括起来。如{ "prop": "val" } 是个合法的JSON,但{ prop:"val" }和{ 'prop': 'val' }确实不合法的。
二、json字符串与JSON对象:
JSON对象:
var json={"name1":"aaa","name2":"bbb"}; //JSON对象 var json={"option":[{"name":"aaa"},{"name":"bbb"}]}; //JSON对象数组
json字符串:
//json字符串,是指该字符串变量的值与json的格式相同,但它不是对象,只是一个字符串。 var jsonVal='{"option":[{"name":"aaa"},{"name":"bbb"}]}';//json字符串
三、json字符串与JSON对象转换:
1.使用eval()函数:将json字符串转成JSON对象
var obj = eval('(' + JSONTest + ')');//console.dir(obj),typeof(obj)
eval函数非常快速,它可以编译执行任何JavaScript程序,因此产生了安全性问题。eval函数可能会执行恶意的脚本。当使用可信任与完善的源代码时才可以使用eval函数,这样可以更安全的解析JSON文本。使用XmlHttp的web应用,页面之间的通讯只允许同源,因此是可以信任的,但这却不是完善的。如果服务器没有严谨的JSON编码,或者没有严格的输入验证,那么可能传送包括危险脚本的无效json文本。
2.使用JSON.parse()函数:将json字符串转成JSON对象
使用JSON.stingify()函数:将JSON对象转成json字符串
var a={"name":"tom","sex":"男","age":"24"};//json对象 var b='{"name":"Mike","sex":"女","age":"29"}';//json字符串 var aToStr=JSON.stringify(a); var bToObj=JSON.parse(b); alert(typeof(aToStr)); //string alert(typeof(bToObj));//object
注:ie8(兼容模式),ie7和ie6没有JSON对象,不过http://www.json.org/提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;你可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。
四、JSON:前台与后台的数据交互
$.ajax获取的返回值是json字符串,
$.getJSON获取的返回值是JSON对象。
$.getJSON(url, function(json){ //数据格式:[{id:xx,name:xx},{id:xx,name:xx}]
var comboData= [{value: "",text: ""}];
for(var j=0;j<json.length;j++){//遍历JSON数据(数组型的JSON)
var temp={text:json[j].name, value:json[j].id};
comboData.push(temp);
}
child.addOption(comboData);
});
五、JSON遍历:
链接:http://blog.goodcmd.com/v1948.htm
情形一:JSON数组(通过数组的length属性进行遍历)
//方式1: var json={"option":[{"name":"aaa"},{"name":"bbb"}]}; for(var i=0;i<json.option.length;i++){ alert(json.option[i].name); } //方式2: <script type="text/javascript" src="/jquery/jquery.js"></script> <script type="text/javascript"> var json =[{"text":"AA","value":"aa"},{"text":"BB","value":"bb"},{"text":"CC","value":"cc"}]; $(json).each(function(){ alert(this.text+" "+this.value); }); </script>
情形二:JSON对象(通过for/in循环进行遍历)
http://blog.csdn.net/wzmmao/article/details/17306073
var json={"name1":"aaa","name2":"bbb"}; for(var i in json){ // alert(i) alert(i + " : " + json[i]); }
六、数组与对象(js,JSON)
链接:http://asyty.iteye.com/blog/1260933
js对象:里面装了许多的key-value对,类似于java里Map<String,Object>;
js数组对象:数组是有序的,不是采用key的方式获取值,而是通过index来索引,相对对象来说还多了length属性。
当然 对象和数组是可以混用的:
var array=["hello", 12, true , {"name": "xiaoming", "age" : 4}]; var boy= {"name":"xiaoming", "brothers":["xiaohuang","xiaohong"]};
看一个有点特殊的例子:
var a = [1,2,3]; //定义一个数组 console.log(a.length); //结果为3 a["name"] = "xiaoming"; //我们再给它赋值(其实是加多了一个属性,而不是往数组里面加多元素值) console.log(a.length); //结果还是为3 a.push(4); console.log(a.length); //结果为4 console.dir(a)//数组a多了一个name属性,值为"xiaoming"