JSON简介
JSON的全称是JavaScript Object Notion,即JavaScript对象符号,它是一种轻量级的数据交换格式,JSON的数据格式既适合人来读/写,也适合计算机本身解析和生成。最早的时候,JSON是JavaScript语言的数据交换格式,后来慢慢法阵成一种语言无关的数据交换格式,这一点非常类似于XML。
JSON主要在类似于C的编程语言中广泛使用,这些语言包括C、C++、C#、Java、JavaScript、Perl、Python等。JSON提供了多种语言之间完成数据交换的能力,因此,JSON也是一种非常理想的数据交换格式。JSON主要有如下两种数据结构:
1、由key-value对组成的数据结构,这种数据结构在不同的语言中有不同的实现。例如,在JavaScript中是一个对象,在Java中是一种Map结构,在C语言中则是一个struct。在其他语言中,可能是record、dictionary、hash table等。
2、有序集合。这种数据结构在不同语言中,可能有list、vector、数组和序列等实现。
上面的两种数据结构在不同的语言中都有对应的实现,因此,这种简便的数据表示放肆完全可以实现跨语言,因此可以作为程序设计语言中通用的数据交换格式。在JavaScript中主要有两种JSON的语法,一种用于创建对象,另一种用于创建数组。
使用JSON语法创建对象
JSON语法创建对象是一种更简单的方式,使用JSON语法可避免书写函数,也可避免使用new关键字,而是直接获取一个JavaScript对象。对于早期的JavaScript版本,如果要使用JavaScript创建一个对象,通常情况下可能会这样写:
//定义一个函数,作为构造器
function Person(name , sex){
this.name = name;
this.sex = sex;
}
//创建一个Person实例
var p = new Person('yeeku', 'male');
//输出Person实例
alert(p.name);
从JavaScript1.2开始,创建对象有了一种更快捷的语法,语法如下:
var p = {"name":'yeeku',
"sex":'male'};
alert(p);
这种语法就是一种JSON语法。显然,使用JSON语法创建对象更加简捷、方便。
JSON创建对象object时,总以({)开始,以(})结束,对象的每个属性名和属性值之间以英文冒号(:)隔开,多个属性定义之间以英文逗号(,)隔开。语法格式如下:
object = {
propertyName1 : propertyValue1,
propertyName2 : propertyValue2,
... ...
}
必须注意的是,并不是每个属性定义后面都有英文逗号(,),必须在后面还有属性定义时才需要逗号(,)。
使用JSON语法创建JavaScript对象时,属性值不仅可以是普通字符串,也可以是任何基本数据类型,还可以是函数、数组甚至是另外一个JSON语法创建的对象。例如:
person = {
name : 'yeeku' ,
sex : 'male' ,
//使用JSON语法为其指定一个属性
son : {
name : 'nono',
grade : 1
} ,
//使用JSON语法为person直接分配一个方法
info : function()
{
document.writeln( "姓名 :" + this.name + "性别 :” + this.sex);
}
}
使用JSON语法创建数组
使用JSON语法创建数组也是非常常见的情形,在早期的JavaScript语法里,通过如下方式来创建数组:
//创建数组对象
var a = new Array();
//为数组元素赋值
a[0] = 'yeeku' ;
//维数组元素赋值
a[1] = 'nono' ;
或者通过如下方式创建数组:
//创建数组对象时直接赋值
var a = new Array('yeeku' , 'nono');
但如果我们使用JSON语法,则可以通过如下方式创建数组:
//使用JSON语法创建数组
var a = [ 'yeeku' , 'nono' ];
JSON创建数组总是以英文括号([)开始,然后依次放入数组元素,元素与元素之间以英文逗号(,)隔开,最后一个数组元素后面不需要英文逗号,但以英文反方括号(])结束。使用JSON创建数组的语法格式如下:
arr = [ value1 , value2, ......]
与JSON语法创建对象相似的是,数组的最后一个与元素后面不能有逗号(,)。
鉴于JSON语法的简单易用,而且作为数据传输载体时,数据传输量更小,因此在Ajax交互中,往往不适用XML作为数据交换格式,而是采用JSON作为数据交换格式。假设需要交换一个对象person,其name属性为yeeku,gender属性为male,age属性为29,使用JSON语法可以简化为如下形式:
person = {
name : ' yeeku ' ,
gender : ' male ' ,
age : 29
}
单如果使用XML数据交换格式,则需要采用如下格式:
<person>
<name>yeeku</name>
<gender>male</gender>
<age>20</age>
</person>
对比这两种表示方式,第一种方式明显比第二种方式更加简洁,数据传输量也更小。
Java的JSON支持
当服务器返回一个满足JSON格式的字符串后,可以利用JSON项目提供的工具类将该字符串转化为JSON对象或JSON数组。
Android系统内置了对JSON的支持,在Android SDK的org.json包下提供了JSONArray、JSONObject、JSONStringer和JSONException等类,通过这些类即可非常方便地完成JSON字符串与JSONArray、JSONObject之间的相互转换。
Java的JSON支持主要依赖于JSONArray和JSONObject两个类,其中:
1、JSONArray代表一个JSON数组,它可完成Java集合(集合元素可以是对象)与JSON字符串之间的相互转换。
2、JSONObject代表了一个JSON对象,它可完成JSON对象与JSON字符串之间的相互转换。
JSON简介的更多相关文章
- iOSXML & JSON 简介
XML & JSON 简介 •JSON –作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式 –基于JavaScript的一个子集 –易读性略差,编码手写难度大,数据量小 ...
- json简介及JsonCpp用法
[时间:2017-04] [状态:Open] [关键词:数据交换格式,json,jsoncpp,c++,json解析,OpenSource] json简介 本文仅仅是添加我个人对json格式的理解,更 ...
- JSON 简介
ylbtech-JSON: JSON 简介 JSON:JavaScript Object Notation(JavaScript 对象表示法) JSON是存储和交换文本信息的语法,类似 XML. JS ...
- C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi
C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...
- js json简介(json的本质也是字符串)(用于服务器和客户端通信)
js json简介(json的本质也是字符串)(用于服务器和客户端通信) 一.总结 1.json的语法和js的语法非常像,只是json的键和值都是双引号,因为json的本质也是字符串 2.json是一 ...
- JSON简介以及用法汇总
什么是JSON? JavaScript 对象表示法(JavaScript Object Notation). JSON是一种轻量级的数据交换格式,某个JSON格式的文件内部譬如可以长成这样: { &q ...
- Json简介与转换数据例子
Json是什么,Json就是javascript对象或者数组格式的字符串,Http协议不能传递JavaScript对象,所以要转换为字符串进行传输.AJAX传递复杂数据如果自己进行格式定义的话会经历组 ...
- ASP.NET 将DataTable解析成JSON简介
这里解析json使用的是Newtonsoft.Json.dll程序集.下面请看code: using System; using System.Collections.Generic; using S ...
- JSON简介以及用法代码汇总
什么是JSON? JavaScript 对象表示法(JavaScript Object Notation). JSON是一种轻量级的数据交换格式,某个JSON格式的文件内部譬如可以长成这样: { &q ...
随机推荐
- 使用Java-UrlConnection调用webService接口
URL wsUrl = new URL("http://192.168.1.1:8080/webservice"); HttpURLConnection conn = (HttpU ...
- angular源码阅读,依赖注入的原理:injector,provider,module之间的关系。
最开始使用angular的时候,总是觉得它的依赖注入方式非常神奇. 如果你跳槽的时候对新公司说,我曾经使用过angular,那他们肯定会问你angular的依赖注入原理是什么? 这篇博客其实是angu ...
- mac os中配置多个jdk(转载+)
1.首先安装所有的JDk: * Mac自带了的JDK6,安装在目录:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/下. * JDK7,JDK8则 ...
- MVC架构 使用FastReport
1.Web.config文件 添加配置 <httpHandlers> <add path="FastReport.Export.axd" verb="* ...
- Unity3D之随心所欲的获取对象
ps 1 建立一个cube 建立一个scripts 2 scripts 赋给cube 3 在script里面直接 gameObject.SetActive (false); 就是操作当前脚本绑定 ...
- rxjava源码分析
RXjava响应式编程 此文作者大暴雨原创,转载请注明出处. 如果线程的知识不是很丰富,请先查看 rxjava源码中的线程知识 一文 rxjava总结就是:异步实现主要是通过扩展观察者模式 ...
- python 03
数据结构 在 python 中有4种内建数据结构, 列表, 元组, 字典和集合. 列表 list 有序项目的数据结构, 类似数组, 是对象. 列表用中括号中用逗号分隔的项目定义.例如 ['apple' ...
- [SQL] SQL 查出一张表中重复的所有记录
在A表中存在一个字段“AccountId”,而且不同记录之间的“AccountId”值有可能会相同,现在就是需要查询出在该表中的各记录之间,“AccountId”值存在重复的项,这里count记录该字 ...
- latex 竖排子图的生成
latex命令如下: 需要的包为: \usepackage{graphicx} \usepackage{subfigure} \begin{figure*}%加*的作用是跨栏(双栏和单栏latex的区 ...
- Remoting&WebService的区别之处
Remoting与Web Services的区别是:(1)既支持TCP信道又支持HTTP信道,传输速度快(2)即可传输XML的SOAP包又可传输二进制流,效率高(3)Remoteing主要用于C/S结 ...