JSON
源码下载软件或网页应用都有数据需要处理,你可以简单地把.JSON文件类比.txt文件或.doc文件,虽然他们不同, 你可以使用WebStorm或其它编辑器创建一个.JSON文档,然后按照 ECMAScript规范去编写文件。JSON独立于Javascript 编程语言,可以方便地进行数据交流,.JSON文件和.js、.html文件一样可以通过网络传输加载到本地解析。
下面是一个非常简单,但是五脏俱全的JSON文档,整个文档非常语义化。首先创建一个花括号表示一个对象,第1行的左花括号表示对象数据的开始, 最后一行的右花括号表示对象数据的结束,花括号里面的结构整体上来看是“名称:值”的结构,称为名称-值对,就是说一对名称和置。 类似Javascript编程中创建的对象,不同的地方是JSON名称要添加引号(JSON要求双引号),Javascript语言中属性名不需要添加引号,在语言中属性名是变量自然不用引号标识, 对于数据文件从数据类型的角度看相当于用一个字符串表示名称,这是规定的语法不用深究。名称和值之间用冒号:连接,名称-值对的值支持数字类型、字符串类型、 数组类型、对象类型、布尔值等。
1 { 2 "name": "中国", 3 "civilization": 5000, 4 "dynasty": ["秦","汉","宋","明"], 5 "河南":{ 6 "position":"中原", 7 "center":"郑州", 8 "ancientCapital":["洛阳","开封","安阳","商丘"] 9 } 10 }
第2行代码的表达的名称-值对,名称是"name",属性是一个字符串"中国",第3行代码定义的值是一个数字类型,第2行第3行的两个名称-值对之间用英文逗号(,)隔开,这一点和Javascript语言的 习惯一样,平级的对象或属性之间使用逗号分隔列举。第4行定义的值一个数组,使用数组去列举几个相关的朝代,JSON支持对象结构数组,河南相对中国是它的属性,河南本身又是一个具有一系列属性 的对象,所以河南的属性使用一个花括号的数据结构去描述,可以看到第6~8行列举了河南子对象的三个属性。在JSON文档中,一般名称-值对中的名称,或者说属性的属性名往往都是英文名名,为了 更语义化可以使用汉语,当然也可以使用任何的你的母语。对象里面可以嵌套对象,数组里面可以嵌套数组,数组里面可以嵌套对象,这和Javascript的对象和数组使用语法基本类似。
解析JSON数据
解析JSON文档之前,首先要获取,正常的情况下一般浏览器要通过异步http(AJAX方法)请求加载服务端json文件,本次测试把.json文件放在了本地,浏览器也要使用http通信程序查看一下该文件是否存在, 你可以自己通过浏览器支持的构造函数XMLHttpRequest()创建、封装一个异步通信.js文件,或者其它的JQuery.js等框架来加载。本案例提供一个原生代码封装的用于AJAX通信的ajax.js文件,里面包含了一个 ajax(url,fun1,fun2)函数,可以用来加载json文件返回其内容,如果你不清楚直接调用。
浏览器获取JSON数据后,通过自身程序,会把
.json文件处理后得到字符串数据,下面第11行代码方法.parse()的参数json就是这个数据
'{"name": "中国","civilization": 5000,......"安阳","商丘"]}}'
parse()
parse()是内置对象JSON的方法,调用方法parse()就像调用Math对象的方法一样,不需要使用构造函数创建JSON对象,可以直接使用JSON对象调用,即JSON.parse()。该方法的参数就是浏览器加载处理.json文件后返回的字符串格式数据, 至于浏览器如何把文件转为了字符串不用关心。
parse()使用
JSON.parse('{......}'); // 返回结果{......} JSON.parse('{"name": "中国"}'); // 返回结果{name: "中国"} JSON.parse('["秦", 12, "宋"]'); //返回结果["秦", 12, "宋"] JSON.parse('"道"'); // 返回结果"道"
json数据处理代码
9 //JSON解析函数fun1 10 let fun1 = function (json) { 11 let obj = JSON.parse(json);//调用parse方法 12 document.write(obj.name);//访问对象的name属性 13 document.write("<br>");// 14 document.write(obj.dynasty[0]);//访问dynasty属性的值,也就是数组的第一个元素 15 }; 16 //定义加载json文件失败的函数fun1 17 let fun2 = function (x) { 18 document.write(x); 19 }; 20 //加载json文件,并把返回的数据作为fun1的参数 21 ajax("china.json",fun1,fun2)
关于http通信不是本节课的内容不再多说,如果你不懂也没有关系,直接学习第10到15行的解析代码就可以,所有的解析语句整理成一个函数,然后把这个函数作为第21行ajax函数的参数即可。第10行代码定义的函数参数json就是代表 通过第21行代码返回的JSON数据,第11行调用方法parse()会把JSON文件转化为一个对象,通过该对象的属性名就可以访问json里面的数据。第12行访问JSON文件里面的name属性,返回的结果是“中国”,第14行访问的是dynasty属性, 该属性的属性值是一个数组,所以在属性名dynasty后面使用了下标,来访问具体的某个数组元素值。