前言:
今天小伙伴们对“算法格式数据结构”大概比较注重,小伙伴们都想要知道一些“算法格式数据结构”的相关内容。那么小编在网摘上搜集了一些关于“算法格式数据结构””的相关知识,希望小伙伴们能喜欢,朋友们快快来了解一下吧!JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。
在JSON出现之前,一直用XML来传递数据。因为XML是一种纯文本格式,所以它适合在网络上交换数据。XML本身不算复杂,但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后,使得开发人员对XML敬而远之,即使你努力钻研几个月,也未必搞得清楚那些复杂的XML规范。
终于,在2002年道格拉斯·克罗克福特(Douglas Crockford)发明了JSON这种超轻量级的数据交换格式。道格拉斯长期担任雅虎的高级架构师,钟情于JavaScript。他设计的JSON实际上是JavaScript的一个子集。
一、JSON语法介绍
1、JSON数据类型
number: 和JavaScript的number完全一致boolean:就是JavaScript的true或falsestring: 就是JavaScript的stringnull: 就是JavaScript的nullarray: 就是JavaScript的Array表示方式[]object: 就是JavaScript对象的{}的表示方式
2、JSON数据结构
JSON是一种轻量级的数据交换格式,JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。从结构上看,所有的数据(data)最终都可以分解成三种类型:
第一种类型是标量(scalar): 也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词第二种类型是序列(sequence):也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"第三种类型是映射(mapping): 也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"
Json的规则非常简单,只用几十个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。
3、JSON语法规则
并列的数据之间用逗号(", ")分隔;
映射用冒号(": ")表示;
并列数据的集合(数组)用方括号("[]")表示;
映射的集合(对象)用大括号("{}")表示。
数据构成的最小单位原来如此简单!所有的数据(包括统计数据)只要“[]”、“{}”、“,”、“:”四个符号(按计算机软件编程规则,数据中的字符要有单引号‘’或“”双引号括起来,这是通则)就可以标记清楚。在编程语言中,只要有了数组(array)和对象(object)就能够储存和处理一切数据了。
JSON已经成为最流行的通用数据处理和交换格式,它是JavaScript的一个子集,和JavaScript有着天然的血脉关系。JavaScript处理JSON数据可谓得心应手。JSON数据强大、简洁的数据表达功能用于处理统计简直就是“量身打造”。在后面的网络统计学算法中,JavaScript和JSON技术扮演着重要角色!
二、JSON文档案例
1、文字描述型统计数据转json数据
比如,下面这句话:
"北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。"
写成json格式就是这样:
[ {"城市":"北京","面积":16800,"人口":1600}, {"城市":"上海","面积":6400,"人口":1800}]
如果事先知道数据的结构,上面的写法还可以进一步简化:
[ ["北京",16800,1600], ["上海",6400,1800]]
2、统计数据表转json数据
现有三个表格如下:
表1:一班
姓名
民族
籍贯
张三
汉族
长春
李四
回族
大连
王五
汉族
哈尔滨
表2:二班
姓名
民族
籍贯
李伟民
汉族
沈阳
张群
汉族
济南
王晓芳
回族
西宁
牟玉兰
汉族
兰州
表3:三班
姓名
民族
籍贯
伍晓光
汉族
北京
杨帆
汉族
广州
表中数据可用JSON表达为:
{ "classA":[ {"name":"张三","nationality":"汉族","nativeplace":"长春"}, {"name":"李四","nationality":"回族","nativeplace":"大连"}, {"name":"王五","nationality":"汉族","nativeplace":"哈尔滨"} ],"classB":[ {"name":"李伟民","nationality":"汉族","nativeplace":"沈阳"}, {"name":"张群","nationality":"汉族","nativeplace":"济南"}, {"name":"王晓芳","nationality":"回族","nativeplace":"西宁"}, {"name":"牟玉兰","nationality":"汉族","nativeplace":"西宁"} ],"classC":[ {"name":"伍晓光","nationality":"汉族","nativeplace":"北京"}, {"name":"杨帆","nationality":"汉族","nativeplace":"广州"} ]}
前面三个表格的数据也可以表示为:
[ {"name":"张三","nationality":"汉族","nativeplace":"长春","class":"一班"}, {"name":"李四","nationality":"回族","nativeplace":"大连","class":"一班"}, {"name":"王五","nationality":"汉族","nativeplace":"哈尔滨","class":"一班"}, {"name":"李伟民","nationality":"汉族","nativeplace":"沈阳","class":"二班"}, {"name":"张群","nationality":"汉族","nativeplace":"济南","class":"二班"}, {"name":"王晓芳","nationality":"回族","nativeplace":"西宁","class":"二班"}, {"name":"牟玉兰","nationality":"汉族","nativeplace":"西宁","class":"二班"}, {"name":"伍晓光","nationality":"汉族","nativeplace":"北京","class":"三班"}, {"name":"杨帆","nationality":"汉族","nativeplace":"广州","class":"三班"}]
还可进一步简化表示为:
[ ["张三","汉族","长春","一班"], ["李四","回族","大连","一班"], ["王五","汉族","哈尔滨","一班"], ["李伟民","汉族","沈阳","二班"], ["张群","汉族","济南","二班"], ["王晓芳","回族","西宁","二班"], ["牟玉兰","汉族","西宁","二班"], ["伍晓光","汉族","北京","三班"], ["杨帆","汉族","广州","三班"]]
一般情况下,在约定好数据格式前提条件下,JSON二维数组为最简单数据格式,特别是进行纯数值统计计算过程中,二维数组处理多元统计数据非常方便。
三、JavaScript处理JSON数据
JavaScript操作JSON数据案例如下:
【#Code 403】:JavaScript操作JSON数据案例
<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>JavaScript脚本代码练习</title><style></style><script language="JavaScript">var oJSONCode1, oJSONCode2, oJSONCode3, oJSONCode4, oJSONCode5; //定义全局变量var oDiv;function init() { //打开网页时加载JSON数据oJSONCode1 =[ {"城市":"北京","面积":16800,"人口":1600}, {"城市":"上海","面积":6400,"人口":1800}]oJSONCode2 =[ ["北京",16800,1600], ["上海",6400,1800]]oDiv = document.getElementById("jsonCode1");oJSONCode3 ={ "classA":[ {"name":"张三","nationality":"汉族","nativeplace":"长春"}, {"name":"李四","nationality":"回族","nativeplace":"大连"}, {"name":"王五","nationality":"汉族","nativeplace":"哈尔滨"} ], "classB":[ {"name":"李伟民","nationality":"汉族","nativeplace":"沈阳"}, {"name":"张群","nationality":"汉族","nativeplace":"济南"}, {"name":"王晓芳","nationality":"回族","nativeplace":"西宁"}, {"name":"牟玉兰","nationality":"汉族","nativeplace":"西宁"} ],"classC":[ {"name":"伍晓光","nationality":"汉族","nativeplace":"北京"}, {"name":"杨帆","nationality":"汉族","nativeplace":"广州"} ] }}function test1() {//var oDiv = document.getElementById("jsonCode1");oDiv.innerHTML = "<p style='color:#ff0000;'>oJSONCode1数据访问和输出</p>";oDiv.innerHTML+="oJSONCode1共有 "+oJSONCode1.length+ " 元素(对象)!<p/>";var oLen = oJSONCode1.length;var oTable = "<table border=1 style='width:300px;'>";oTable+="<caption><i>oJSONCode1数据列表(JSON数据遍历)</i></caption>";oTable+="<tr><td>城市</td><td>面积</td><td>人口</td></tr>";for (var i=0; i<oLen; i++) { //数据访问oJSONCode1[i].城市 oTable+="<tr><td>"+oJSONCode1[i].城市+"</td><td>"+oJSONCode1[i].面积+"</td><td>"+oJSONCode1[i].人口+"</td></tr>"; }oTable+="</table>";oDiv.innerHTML+=oTable;oDiv.innerHTML+="<p style='color:#ff0000;'>oJSONCode2数据访问和输出</p>";var oTable = "<table border=1 style='width:300px;'>";oTable+="<caption><i>oJSONCode2数据列表(JSON数据遍历)</i></caption>";oTable+="<tr><td>城市</td><td>面积</td><td>人口</td></tr>";for (var i=0; i<oLen; i++) { //数据访问oJSONCode2[i][0] oTable+="<tr><td>"+oJSONCode2[i][0]+"</td><td>"+oJSONCode2[i][1]+"</td><td>"+oJSONCode2[i][2]+"</td></tr>"; }oTable+="</table>";oDiv.innerHTML+=oTable;}function test2() {var oLen = oJSONCode1.length;oDiv.innerHTML = "<p style='color:#ff0000;'>oJSONCode1添加</p>";oDiv.innerHTML+="oJSONCode1数据添加前共有 "+oJSONCode1.length+ " 元素(对象)!<p/>";oJSONCode1[oLen]={"城市":"天津","面积":8900,"人口":1200}; //添加数据对象oJSONCode1[0].面积 = 15000; //修改数据对象oLen = oJSONCode1.length;oDiv.innerHTML+="oJSONCode1数据添加后共有 "+oJSONCode1.length+ " 元素(对象),同时北京面积被修改!<p/>";var oTable = "<table border=1 style='width:300px;'>";oTable+="<caption><i>oJSONCode1数据列表(JSON数据遍历)</i></caption>";oTable+="<tr><td>城市</td><td>面积</td><td>人口</td></tr>";for (var i=0; i<oLen; i++) { //数据访问oJSONCode1[i].城市 oTable+="<tr><td>"+oJSONCode1[i].城市+"</td><td>"+oJSONCode1[i].面积+"</td><td>"+oJSONCode1[i].人口+"</td></tr>"; }oTable+="</table>";oDiv.innerHTML+=oTable;var oLen = oJSONCode2.length;oDiv.innerHTML+="<p style='color:#ff0000;'>oJSONCode2添加</p>";oDiv.innerHTML+="oJSONCode2数据添加前共有 "+oJSONCode2.length+ " 元素(对象)!<p/>";oJSONCode2[oLen]=["天津",8900,1200]; //添加数据数组oJSONCode2[0][1] = 15000; //修改数据对象oLen = oJSONCode2.length;oDiv.innerHTML+="oJSONCode2数据添加后共有 "+oJSONCode2.length+ " 元素(对象),同时北京面积被修改!<p/>";var oTable = "<table border=1 style='width:300px;'>";oTable+="<caption><i>oJSONCode2数据列表(JSON数据遍历)</i></caption>";oTable+="<tr><td>城市</td><td>面积</td><td>人口</td></tr>";for (var i=0; i<oLen; i++) { //数据访问oJSONCode1[i].城市 oTable+="<tr><td>"+oJSONCode2[i][0]+"</td><td>"+oJSONCode2[i][1]+"</td><td>"+oJSONCode2[i][2]+"</td></tr>"; }oTable+="</table>";oDiv.innerHTML+=oTable;}function test3() {var oLen = oJSONCode1.length;oDiv.innerHTML = "<p style='color:#ff0000;'>oJSONCode1删除</p>";oDiv.innerHTML+="oJSONCode1数据删除前共有 "+oJSONCode1.length+ " 元素(对象)!<p/>";var oTable = "<table border=1 style='width:300px;'>";oTable+="<caption><i>oJSONCode1数据列表(JSON数据遍历)</i></caption>";oTable+="<tr><td>城市</td><td>面积</td><td>人口</td></tr>";for (var i=0; i<oLen; i++) { //数据访问oJSONCode1[i].城市 oTable+="<tr><td>"+oJSONCode1[i].城市+"</td><td>"+oJSONCode1[i].面积+"</td><td>"+oJSONCode1[i].人口+"</td></tr>"; }oTable+="</table><p/>";oDiv.innerHTML+=oTable;oJSONCode1.length=oLen-1;oDiv.innerHTML+="oJSONCode1数据删除后共有 "+oJSONCode1.length+ " 元素(对象)!<p/>";oLen = oJSONCode1.length;var oTable = "<table border=1 style='width:300px;'>";oTable+="<caption><i>oJSONCode1数据列表(JSON数据遍历)</i></caption>";oTable+="<tr><td>城市</td><td>面积</td><td>人口</td></tr>";for (var i=0; i<oLen; i++) { //数据访问oJSONCode1[i].城市 oTable+="<tr><td>"+oJSONCode1[i].城市+"</td><td>"+oJSONCode1[i].面积+"</td><td>"+oJSONCode1[i].人口+"</td></tr>"; }oTable+="</table>";oDiv.innerHTML+=oTable;}function test4() {var oLen = oJSONCode3.classA.length+oJSONCode3.classB.length+oJSONCode3.classC.length;oDiv.innerHTML = "<p style='color:#ff0000;'>oJSONCode3共有 "+oLen+" 条数据!</p>";var oTable = "<table border=1 style='width:400px;'>";oLen = oJSONCode3.classA.length;oTable+="<caption><i>oJSONCode3数据列表</i></caption>";oTable+="<tr><td>姓名</td><td>民族</td><td>出生的</td><td>班级</td></tr>";for (var i=0; i<oLen; i++) { oTable+="<tr><td>"+oJSONCode3.classA[i].name+"</td><td>"+oJSONCode3.classA[i].nationality +"</td><td>"+oJSONCode3.classA[i].nativeplace+"</td><td>classA</td></tr>"; }oLen = oJSONCode3.classB.length;for (var i=0; i<oLen; i++) { oTable+="<tr><td>"+oJSONCode3.classB[i].name+"</td><td>"+oJSONCode3.classB[i].nationality +"</td><td>"+oJSONCode3.classB[i].nativeplace+"</td><td>classB</td></tr>"; }oLen = oJSONCode3.classC.length;for (var i=0; i<oLen; i++) { oTable+="<tr><td>"+oJSONCode3.classC[i].name+"</td><td>"+oJSONCode3.classC[i].nationality +"</td><td>"+oJSONCode3.classC[i].nativeplace+"</td><td>classC</td></tr>"; }oTable+="</table>";oDiv.innerHTML+=oTable;}function test5() {oJSONCode3.classD=[]; //添加classD对象为数组oJSONCode3.classD[0]={"name":"张丽莎","nationality":"汉族","nativeplace":"重庆"}; //向classD对象的数组赋值oJSONCode3.classD[1]={"name":"赵国强","nationality":"汉族","nativeplace":"西安"};oJSONCode3.classA[1].name = "李刚"; //数据修改oJSONCode3.classA[1].nationality = "维吾尔族";var oLen = oJSONCode3.classA.length+oJSONCode3.classB.length+oJSONCode3.classC.length+oJSONCode3.classD.length;oDiv.innerHTML = "<p style='color:#ff0000;'>oJSONCode3共有 "+oLen+" 条数据!</p>";var oTable = "<table border=1 style='width:400px;'>";oLen = oJSONCode3.classA.length;oTable+="<caption><i>oJSONCode3数据列表</i></caption>";oTable+="<tr><th>序号</th><th>姓名</th><th>民族</th><th>出生的</th><th>班级</th></tr>";var oS = 1;for (var i=0; i<oLen; i++) { oTable+="<tr><td>"+oS+"</td><td>"+oJSONCode3.classA[i].name+"</td><td>"+oJSONCode3.classA[i].nationality +"</td><td>"+oJSONCode3.classA[i].nativeplace+"</td><td>classA</td></tr>"; oS++; }oLen = oJSONCode3.classB.length;for (var i=0; i<oLen; i++) { oTable+="<tr><td>"+oS+"</td><td>"+oJSONCode3.classB[i].name+"</td><td>"+oJSONCode3.classB[i].nationality +"</td><td>"+oJSONCode3.classB[i].nativeplace+"</td><td>classB</td></tr>"; oS++; }oLen = oJSONCode3.classC.length;for (var i=0; i<oLen; i++) { oTable+="<tr><td>"+oS+"</td><td>"+oJSONCode3.classC[i].name+"</td><td>"+oJSONCode3.classC[i].nationality +"</td><td>"+oJSONCode3.classC[i].nativeplace+"</td><td>classC</td></tr>"; oS++; }oLen = oJSONCode3.classD.length;for (var i=0; i<oLen; i++) { oTable+="<tr><td>"+oS+"</td><td>"+oJSONCode3.classD[i].name+"</td><td>"+oJSONCode3.classD[i].nationality +"</td><td>"+oJSONCode3.classD[i].nativeplace+"</td><td>classD</td></tr>"; oS++; }oTable+="</table>";oTable+="<i>注:表中添加了班级classD,修改了第二条数据</i>";oDiv.innerHTML+=oTable;}function test6() {oDiv.innerHTML = "<p style='color:#ff0000;'>oJSONCode3删除</p>";oDiv.innerHTML+="<p>数据删除前oJSONCode3.classC显示为对象:"+oJSONCode3.classC+"</p>";delete oJSONCode3.classC; //对象删除(删除班级classC)oDiv.innerHTML+="<p>数据删除后oJSONCode3.classC显示为未定义:"+oJSONCode3.classC+"</p>";}</script></head><body onload="init()"></p><p><b>数据:</b></p><hr/><div style="width:600px; height:300px; overflow:auto; border:1px solid #aaaaaa;"><pre>oJSONCode1 =[ {"城市":"北京","面积":16800,"人口":1600}, {"城市":"上海","面积":6400,"人口":1800}]oJSONCode2 =[ ["北京",16800,1600], ["上海",6400,1800]]oJSONCode3 ={"classA":[ {"name":"张三","nationality":"汉族","nativeplace":"长春"}, {"name":"李四","nationality":"回族","nativeplace":"大连"}, {"name":"王五","nationality":"汉族","nativeplace":"哈尔滨"} ],"classB":[ {"name":"李伟民","nationality":"汉族","nativeplace":"沈阳"}, {"name":"张群","nationality":"汉族","nativeplace":"济南"}, {"name":"王晓芳","nationality":"回族","nativeplace":"西宁"}, {"name":"牟玉兰","nationality":"汉族","nativeplace":"西宁"} ],"classC":[ {"name":"伍晓光","nationality":"汉族","nativeplace":"北京"}, {"name":"杨帆","nationality":"汉族","nativeplace":"广州"} ]}</pre></div><p><b>功能:数组和对象形式JSON数据浏览、修改、添加和删除练习</b></p><hr/><p>1、JSON数据(oJSONCode1、oJSONCode2)访问和输出(<a href="#" onclick="test1()">运行</a>)</p><p>2、JSON数据(oJSONCode1、oJSONCode2)添加、修改(<a href="#" onclick="test2()">运行</a>)</p><p>3、JSON数据(oJSONCode1)删除(<a href="#" onclick="test3()">运行</a>)</p><p>4、JSON数据(oJSONCode3)访问和输出(<a href="#" onclick="test4()">运行</a>)</p><p>5、JSON数据(oJSONCode3)添加、修改(<a href="#" onclick="test5()">运行</a>)</p><p>6、JSON数据(oJSONCode3)删除(最后运行)(<a href="#" onclick="test6()">运行</a>)</p><p><b>效果:</b></p><hr/><div id="jsonCode1"></div></body><html>
JSON数据结构是描述各类型统计数据的最佳选择,为统计数据处理带来巨大便利条件。