json的使用
- 什么是json
 - eval()将json转化为js对象
 - json语法
 - json.parse()对象转换
 - json.stringify将js对象转化为字符串
 - 获取服务器数据写入自己的json文件,再使用js读取json文件
 
什么是json
JSON: JavaScript Object Notation(JavaScript 对象表示法)
JSON 是存储和交换文本信息的语法,类似 XML。是轻量级的文本数据交换格式。
JSON 比 XML 更小、更快,更易解析。
JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
eval()将json转化为js对象
无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。
 必须把文本包围在括号中,这样才能避免语法错误
var downJsonObj = eval("("+jsonText+")")
 
json语法
JSON 语法是 JavaScript 对象表示语法的子集。
- 数据在键/值对中
 - 数据由逗号分隔
 - 大括号 {} 保存对象
 - 中括号 [] 保存数组,数组可以包含多个对象
 
json键值对
key : value
 
eg:
"name" : "zhangsan"
 
json的值
- 数字(整数或浮点数)
 - 字符串(在双引号中)
 - 逻辑值(true 或 false)
 - 数组(在中括号中)
 - 对象(在大括号中)
 - null
 
json对象
{
	'name' : 'zhangsan',
	'age' : 18,
	'sex' : 'man' 
}
 
循环遍历
遍历取出键
var jsonObj = {
	'name' : 'zhangsan',
	'age' : 18,
	'sex' : 'man' 
}
for(x in jsonObj){
	console.log(x)
}
 
遍历取出值
var jsonObj = {
	'name' : 'zhangsan',
	'age' : 18,
	'sex' : 'man' 
}
for(x in jsonObj){
	console.log(jsonObj[x])
}
 
对象嵌套
{
	'name' : 'zhangsan',
	'age' : 18,
	'sex' : 'man',
	'parents' : {
		'mother' : 'lisi',
		'father' : 'wangwu'
	}
}
 
对象中嵌套数组
{
	'name' : 'zhangsan',
	'age' : 18,
	'sex' : 'man',
	'home' : ['Beijing','Shanghai','ZheJiang']
}
 
删除对象属性
使用delete关键字
var jsonObj = {
	'name' : 'zhangsan',
	'age' : 18,
	'sex' : 'man' 
};
delete jsonObj.name;
 
或者
var jsonObj = {
	'name' : 'zhangsan',
	'age' : 18,
	'sex' : 'man' 
};
delete jsonObj.['name'];
 
json 数组
[
	{
		'id' : 1,
		'name' : 'zhangsan',
		'age' : 18	
	},
	{
		'id' : 2,
		'name' : 'lisi',
		'age' : 20
	}
]
 
遍历数组
建议使用for-in循环,当然for的传统写法也是ok的
错误示范
这样遍历出来是遍历的索引号
var jsonArray = [1,2,3,4];
for(x in jsonArray){
	console.log(x)
}
 

正确示范
var jsonArray = [1,2,3,4];
for(x in jsonArray){
	console.log(jsonArray[x])
}
 

删除数组的元素
 var jsonArray = [1, 2, 3, 4];
 delete jsonArray[2];
 for (x in jsonArray) {
     console.log(jsonArray[x])
 }
 

注:其他赋值修改等操作就是和js数组一样
json 文件
JSON 文件的文件类型是 .json
 JSON 文本的 MIME 类型是 application/json
json.parse()对象转换
JSON 通常用于与服务端交换数据。
在接收服务器数据时一般是字符串。
我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。
语法
JSON.parse(text,[function])
 
参数:
 text:一个有效的json字符串
 function:可选择,表示转换结果的函数,将为对象的每个成员调用此函数
实例
var jsonObj = JSON.parse('{ "name":"zhangsan", "age":18 }');
 
从服务端接收 json 数据
我们可以使用 AJAX 从服务器请求 JSON 数据,并解析为 JavaScript 对象。
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myObj = JSON.parse(this.responseText);
        document.getElementById("demo").innerHTML = myObj.name;
    }
};
xmlhttp.open("GET", "/try/ajax/json_demo.txt", true);
xmlhttp.send();
 
从服务端接收数组的 JSON 数据
如果从服务端接收的是数组的 JSON 数据,则 JSON.parse 会将其转换为 JavaScript 数组:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myArr = JSON.parse(this.responseText);
        document.getElementById("demo").innerHTML = myArr[1];
    }
};
xmlhttp.open("GET", "/try/ajax/json_demo_array.txt", true);
xmlhttp.send();
 
json.stringify将js对象转化为字符串
语法:
JSON.stringify(value[, function[, space]])
 
参数:
 value:要转化的js值
 function:可选,用于转换结果的函数或数组, 如果 function 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。
 如果 function 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 function 数组。
 space:可选,用于给文本添加缩进,空格,换行符,常用数字表示空格数,\t 制表符,\n 换行符
实例
var jsonObj = {
	'name' : 'Zhangsan',
	'age'  : 18
};
var upLoadJsonObj = JSON.stringify(jsonObj);
 
获取服务器数据写入自己的json文件,再使用js读取json文件
这个例子我使用的是高德地图来进行举例
 要求:获取高德地图区域查询的数据,写入本地的gaode.json文件中,之后使用js读取本地的gaode.json文件,这样以后在使用的时候就无需借助高德的Api进行查询,速度就会快很多










