JSON的基本结构和数据交换原理
0、补充的写在前面的话
- JSON是一种数据结构,你可以理解为编写内容的规范和要求,它不是一种特殊的文件,所以不会有什么 .java 或者 .class 之类的后缀
- JSON用于不同“平台”间传递信息,如前端读不懂Java数据,后端不明白JS数据,所以通过规范的内容体也就是JSON来传递信息
- 信息在不同的两方传递,大家各自都有解析JSON的方法,能够读懂上面的信息,就达到了交流的目的
0、题外话:Jason Voorhees?

1、JSON介绍
JSON(JavaScript Object Notation),类似于XML,是一种数据交换格式,相比之下,它比XML表达起来更简单。虽然它源自于JavaScript,但是只是一种数据格式,可以用于任何编程语言。
2、JSON的数据结构
- null: 表示为 null
- boolean: 表示为 true 或 false
- number: 一般的浮点数表示方式
- string: 表示为 "..."
- array: 表示为 [ ... ]
- object: 表示为 { ... }
2.1 array


2.2 object

{
"orderID": 12345,
"shopperName": "John Smith",
"shopperEmail": "johnsmith@example.com",
"contents": [
{
"productID": 34,
"productName": "SuperWidget",
"quantity": 1
},
{
"productID": 56,
"productName": "WonderWidget",
"quantity": 3
}
],
"orderCompleted": true
}
{
"orderID": 12345,
"shopperName": "John Smith",
"shopperEmail": "johnsmith@example.com",
"contents": [
{
"productID": 34,
"productName": "SuperWidget",
"quantity": 1
},
{
"productID": 56,
"productName": "WonderWidget",
"quantity": 3
}
],
"orderCompleted": true
}
3、JSON与XML的互相比较
3.1 简单的XML
<person>
<name>xiaoMing</name>
<age>20</age>
</person>
<person>
<name>xiaoMing</name>
<age>20</age>
</person>
{
"name":"xiaoMing",
"age":20
}
{
"name":"xiaoMing",
"age":20
}
3.2 复杂的XML
<section>
<title>BOOK</title>
<signing>
<author name="author-1"/>
<book title="book1" price="$11"/>
</signing>
<signing>
<author name="author-2"/>
<book title="book2" price="$22"/>
</signing>
</section>
<section>
<title>BOOK</title>
<signing>
<author name="author-1"/>
<book title="book1" price="$11"/>
</signing>
<signing>
<author name="author-2"/>
<book title="book2" price="$22"/>
</signing>
</section>
"section":{
"title":"BOOK",
"signing":[
{
"author":
{
"name":"author-1"
},
"book":
{
"title":"book1",
"price":"$11"
}
},
{
"author":
{
"name":"author-2"
},
"book":
{
"title":"book2",
"price":"$22"
}
}]
}
"section":{
"title":"BOOK",
"signing":[
{
"author":
{
"name":"author-1"
},
"book":
{
"title":"book1",
"price":"$11"
}
},
{
"author":
{
"name":"author-2"
},
"book":
{
"title":"book2",
"price":"$22"
}
}]
}
3.3 JSON和XML的优缺点
3.3.1 XML的优缺点
3.3.2 JSON的优缺点
4、使用JSON实现数据交换
4.1 数据交换原理
- 如果是客户端请求数据,那么服务器端就将Java对象先转换成 JSON字符串;
- 经响应把字符串传到客户端之后,客户端就会接收到这个转换结果;
- 但JavaScript要求把这个字符串变成对象格式才更方便访问;
- 所以在客户端的JavaScript代码中又需要将这个JSON字符串变成JavaScript能够识别的对象;
- 这样就完成了从服务器端的对象到客户端对象的 整个转变过程。
4.2 Java对象转换为JSON
Employee emp = new Employee(1,“王小贱”,“男”);
JSONObject obj = JSONObject.fromObject(emp);
String jsonStr = obj.toString();
Employee emp = new Employee(1,“王小贱”,“男”);
JSONObject obj = JSONObject.fromObject(emp);
String jsonStr = obj.toString();
List<Employee> emps = new ArrayList< Employee >();
for(int i=0;i<3;i++){
Employee s = new Employee ();
s.setId(i+1);
s.setName("Bear" + i);
s.setGender(“男”);
emps.add(s);
}
JSONArray jsonArr = JSONArray.fromObject(emps);
String jsonStr = jsonArr.toString();
List<Employee> emps = new ArrayList< Employee >();
for(int i=0;i<3;i++){
Employee s = new Employee ();
s.setId(i+1);
s.setName("Bear" + i);
s.setGender(“男”);
emps.add(s);
}
JSONArray jsonArr = JSONArray.fromObject(emps);
String jsonStr = jsonArr.toString();
4.3 JSON字符串转换成JS对象
var jsonObj = eval(“(“ + json + “)”);
var jsonObj = eval(“(“ + json + “)”);
<script type="text/javascript" src="js/prototype-1.6.0.3.js"></script>
<script type="text/javascript">
function f1(){
var xhr = getXhr();
xhr.open('get','quoto.do',true);
xhr.onreadystatechange=function(){
if(xhr.readyState == 4){
var txt = xhr.responseText;
//将json字符串转换成javascript对象或者数组
var arr = txt.evalJSON();
}
};
xhr.send(null);
}
</script>
<script type="text/javascript" src="js/prototype-1.6.0.3.js"></script>
<script type="text/javascript">
function f1(){
var xhr = getXhr();
xhr.open('get','quoto.do',true);
xhr.onreadystatechange=function(){
if(xhr.readyState == 4){
var txt = xhr.responseText;
//将json字符串转换成javascript对象或者数组
var arr = txt.evalJSON();
}
};
xhr.send(null);
}
</script>
附件列表
JSON的基本结构和数据交换原理的更多相关文章
- JSON --- 一种轻量级的数据交换格式
目录 1. 语法 2. 解析与序列化 JSON.stringify( jsData[, filter, indent] ) JSON.parse( jsonData[, reduction]) JSO ...
- JSON、使用JSON进行数据交换的基础和原理
1. JSON 1.1. JSON 1.1.1. 什么是JSON JSON即Javascript对象表示法,是一种现在主流的数据交换格式.之所以应用广泛还是由其简单易读所决定的. 简单,只有六种类型的 ...
- 常用两种数据交换格式之XML和JSON的比较
目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...
- XML和JSON两种数据交换格式的比较
在web开发领域,主要的数据交换格式有XML和JSON,对于在 Ajax开发中,是选择XML还是JSON,一直存在着争议,个人还是比较倾向于JSON的.一般都输出Json不输出xml,原因就是因为 x ...
- iOS 中 JSON 数据交换格式
JSON (JavaScript Object Notation)是一种轻量级的数据交换格式. JSON 的详细教程,能够參见 JSON 中国:http://www.json.org.cn/ ...
- 数据交换格式XML和JSON对比
1.简介: XML:extensible markup language,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(document type definition)文档类型定义来组 ...
- 【学习】006数据交换格式与SpringIOC底层实现
课程目标 XML和JSON Java反射机制 手写SpringIOC 什么是数据交换格式 客户端与服务器常用数据交换格式xml.json.html 数据交换格式用场景 移动端(安卓.IOS)通讯方式采 ...
- MySQL 5.7:非结构化数据存储的新选择
本文转载自:http://www.innomysql.net/article/23959.html (只作转载, 不代表本站和博主同意文中观点或证实文中信息) 工作10余年,没有一个版本能像MySQL ...
- Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)
一.SolrJ介绍 1. SolrJ是什么? Solr提供的用于JAVA应用中访问solr服务API的客户端jar.在我们的应用中引入solrj: <dependency> <gro ...
随机推荐
- 利用Arduino快速制作Teensy BadUSB, 攻击计算机
BadUsb介绍 BadUSB是计算机安全领域的热门话题之一,该漏洞由Karsten Nohl和Jakob Lell共同发现,并在2014年的BlackHat安全大会上公布. 虽然已隔一两年,但还是有 ...
- angular2 组件交互
1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间 ...
- 内存数据库之Apache Ingite
上一篇文章,我们做了内存数据库的技术选型: 内存数据库技术选型 本文中,我们继续深入研究Apache Ignite,同时分享一些我们.Net的编码实践. 首先,Apache Ignite是一个内存数据 ...
- 【踩坑】activiti工作流的svg-xml解析报错
1.问题记录 工作流配置画模板的时候保存成功但是部署报错. IE下 activiti工作流解析xml报错 type "path" must be followed by eithe ...
- RSA,Miller-Rabin素数测试的源流及其证明
一.RSA与公钥加密系统的起源与影响. 为了更好地突出公钥加密系统相对私钥加密系统的优势,让我们从这两个问题开始: 这个世界上如果没有公钥加密系统会怎么样呢?全用私钥加密系统会出现什么问题呢? 首先, ...
- What is the difference between Debug and Release in Visual Studio?
"Debug" and "Release" are actually just two labels for a whole slew of settings ...
- vue.js拓展篇(8):测试开发与调试
内容 第15章:测试开发与调试 任何实际项目的开发,除了功能性代码的完成,规范的开发流程和严谨的测试都是不可或缺的.合理使用工具将事半功倍. 1.ESLint ESLint是Lint语法检查工具,避免 ...
- html:table属性cellpadding
cellpadding:单元格边距(空白区域) colspan:可以横跨的列数(td/th都算一列) 详细:http://www.dreamdu.com/xhtml/attribute_cellpad ...
- POI处理Excel中的日期数据类型
在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格 的类型是否则NUMERIC类型, 然后再判断单元格是 ...
- SQL Server 2014 64位版本链接32位Oracle数据库
问题背景: 刚进入公司不久的BI新手,最近接部门的一个交接项目,需要在SQL Server上通过openquery来获取Oracle数据库的数据.各种配置,各种设置折腾了一周之久.在此,将自己的问题解 ...
