龙空技术网

JSON数据结构 - 网络统计学编程

银河统计工作室 164

前言:

今天小伙伴们对“算法格式数据结构”大概比较注重,小伙伴们都想要知道一些“算法格式数据结构”的相关内容。那么小编在网摘上搜集了一些关于“算法格式数据结构””的相关知识,希望小伙伴们能喜欢,朋友们快快来了解一下吧!

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数据结构是描述各类型统计数据的最佳选择,为统计数据处理带来巨大便利条件。

标签: #算法格式数据结构 #js中的json数据如何获取有多少个可用值 #json number类型