Json学习一(基础概念知识学习)

1.Json简单介绍

JSON(JavaScript Object Notation)

是一种轻量级的数据交换格式。它使得人们非常easy的进行阅读和编写。

同一时候也方便了机器进行解析和生成。它是基于 JavaScript

Programming Language , Standard ECMA-262 3rd Edition - December 1999

的一个子集。 JSON採用全然独立于程序语言的文本格式。可是也使用了类C语言的习惯(包括C, C++, C#, Java,

JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

JSON基于两种结构:

?“名称/值”对的集合(A collection of name/value

pairs)。

不同的编程语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary)。哈希表(hash

table),有键列表(keyed list)。或者关联数组 (associative array)。

?值的有序列表(An ordered list of

values)。

在大部分语言中,它被实现为数组(array),矢量(vector),列表(list),序列(sequence)。

这些都是常见的数据结构。眼下,绝大部分编程语言都以某种形式支持它们。这使得在各种编程语言之间交换相同格式的数据成为可能。

JSON具有下面这些形式:

对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)開始,“}”(右括号)结束。每一个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

数组(array) 是值(value)的有序集合。一个数组以“[”(左中括号)開始,“]”(右中括号)结束。

值之间使用“,”(逗号)分隔。

值(value) 能够是双引號括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构能够嵌套。

字符串(string) 是由双引號包围的随意数量Unicode字符的集合,使用反斜线转义。

一个字符(character)即一个单独的字符串(character string)。

JSON的字符串(string)与C或者Java的字符串非常类似。

数值(number) 也与C或者Java的数值非常类似。

仅仅是JSON的数值没有使用八进制与十六进制格式。

同一时候,能够在随意标记之间加入空白。

2.Java中的Json

2.1.json源代码

源代码下载地址:https://github.com/stleary/JSON-java

2.2.JsonLib的使用

Json-lib 下载地址:http://json-lib.sourceforge.net/

所须要的jar包括下面:

commons-beanutils-1.8.3.jar

commons-collections-3.2.1.jar

commons-lang-2.6.jar

commons-logging-1.1.1.jar

ezmorph-1.0.6.jar

json-lib-2.4-jdk15.jar

2.3.Org.json

下载地址:https://search.maven.org/#search|gav|1|g%3A%22org.json%22%20AND%20a%3A%22json%22

3.JavaScript中的json

JSON 是JavaScript对象文字符号的一个子集. 由于JSON是JavaScript的一个子集, 它能够自如的在JavaScript中使用.

var myJSONObject = {
"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
}; 

在这个样例中, 创建了仅仅包括一个成员 bindings 的对象, 而这个对象又包括了一个拥有三个对象的数组, 当中每一个数组对象包括了 ircEvent, method, regex 三个成员.

成员能够用 点(.) 或者 下标([]) 操作符来引用.

 myJSONObject.bindings[0].method // "newURI"

要将 JSON 字符串转换成一个对象, 我们能够用 eval() 函数. eval() 会触发JavaScript的编译器. 由于JSON是JavaScript的一个真子集, 编译器会正确的解析字符串内容, 同一时候生成一个对象结构. 字符串必须用括号括起来, 以免产生JavaScript语法歧义.

var myObject = eval(‘(‘ + myJSONtext + ‘)‘);

eval 函数速度非常快. 它能够编译和运行不论什么JavaScript代码, 这里可能存在安全问题. 当源是可信的并且完整的时候, 能够使用 eval. 而用JSON解析器是更安全的方式. 在使用XMLHttpRequest的Web程序中, 仅仅同意在同源的情况下通信, 因此它是可信的. 但它不一定是完整的. 假设server用的不是严谨的JSON编码, 或者它没有严格检查全部输入内容, 它也能够提供无效的JSON, 同一时候带上危急的脚本. 此时, eval 将会运行该脚本, 产生危害.

为了解决问题, 应该使用JSON解析器. JSON解析器仅仅会识别JSON文本, 拒绝全部脚本. 在提供原生JSON支持的浏览器中, JSON解析器比 eval 更快. 原生的JSON支持非常有可能包括在ECMAScript下一个版本号的标准中.

var myObject = JSON.parse(myJSONtext, reviver);

可选的reviver參数是一个函数, 在每一个键/值在每一级的终于结果后都会被调用. 每一个值将会被替换为reviver函数的返回结果. 它能够用来将对象组织成伪类(pseudoclasses)的一个实例, 或者将date字符串转换成Date对象

myData = JSON.parse(text, function (key, value) {
var type;
if (value && typeof value === ‘object‘) {
type = value.type;
if (typeof type === ‘string‘ && typeof window[type] === ‘function‘) {
return new (window[type])(value);
}
}
return value;
}); 

JSON字符串化是一个反过来的动作, 它将JavaScript的数据结构转化成JSON字符串. JSON不支持循环的数据结构, 因此在用JSON字符串化的时候, 不要给它循环引用的结构.

var myJSONText = JSON.stringify(myObject, replacer);

假设 stringify 方法发现对象包括了一个 toJSON 的方法, 它会调用这种方法, 然后将返回的结果字符串化. 这同意对象自定义它们的JSON表示方式.

字符串化方法能够带一个可选的字符串数组. 这些字符串能够用来选择哪些属性将会被包括在生成的JSON文本中.

字符串化方法还能够使用一个可选的 replacer 函数, 这个函数将会在结构中的每一个值的 toJSON 方法(假设存在的话) 后调用. 它将接收每一个key和value作为它的參数. 这会被绑定在包括key的对象中. 它返回的值会被字符串化.

没有JSON表示的值(比方函数和undefined)将会被排除.

无限大的数字将会被替换为NULL, 要替换其它值, 你能够用类似的 replacer 函数:

function replacer(key, value) {
if (typeof value === ‘number‘ && !isFinite(value)) {
return String(value);
}
return value;
} 

提供一个合适的 reviver 函数给 JSON.parse 就能够实现.

4.Json与XML

可扩展标记语言(XML)是一种来自标准通用标记语言(SGML)的文本格式. 与SGML相比, XML更简单. 超文本标记语言(HTML), 经过对照, 显得更为简单. 虽然如此, 一本好的HTML參考书有一英寸厚. 这是由于文档的格式化和结构化是一件复杂的事情.

大部分XML的优势是环绕它作为可交互数据序列格式的角色. 作为数据表示语言, XML有着两个巨大的优势:

- 它是基于文本的.

- 它是位置无关的.

全部这些使得她相比其它数据交换格式在更高层次上独立于应用程序. 其实, XML已经是W3C的标准, 这意味着已经无需再去争论(或者看起来如此).

遗憾的是, XML不能非常好的适用于数据交换, 就好像扳手并非用来钉钉子的. 它包括了太多的包装, 并且它跟大多数编程语言的数据模型不匹配. 大部分程序猿在第一眼见到XML的时候, 他们都被XML的丑陋和低效所震惊了. 事实证明, 第一反应旺旺是正确的. 还有还有一种蚊子符号, 她不但有XML的全部长处, 并且她更适合于数据交换. 这个符号就是JavaScript对象符号(JSON).

关于XML的最明智的见解(比如: xmlsuck.org)指出XML在作为数据交互格式上存在非常大的问题. 但这一不足被它所带来的互操作性和开放性所弥补.

JSON拥有相同的互操作性和开放性, 并且没有其它不足.

让我们在觉得重要的属性上来比較XML和JSON.

1)简单

XML比SGML更简单, 但JSON比XML还要简单. JSON拥有更简单的语法, 并且直接相应到现代语言的数据结构.

2)可扩展性

JSON是不可扩展的, 由于她不须要被扩展. JSON不是一个文档标记语言, 因此没有不论什么必要去定义新的标签或者属性来表示内部数据.

3)互操作性

JSON拥有XML一样的互操作性能.

4)开放性

JSON至少与XML一样开放, 或许更开放. 由于她不在社团/政治标准化斗争的中心.

5)XML是可供人类阅读的

相比XML, JSON更加easy阅读. 她也更easy书写.同一时候, 也更easy被机器读取和写入.

6)XML能够用来作为数据交换格式, 使得用户能够将他们的数据在类似的程序之间相互移动.

相同的, JSON也如此.

7)XML提供了一种数据结构, 以包括很多其它的信息.

相同的, JSON也如此.

8)XML非常easy处理, 由于数据的结构是简单并且标准的.

JSON能够更easy的处理, 由于她的结构更简单.

9)有非常多可重用的软件提供给程序猿来处理XML, 他们不须要重写代码.

JSON, 作为一个更简单的符号, 须要更少的软件. 在JavaScript和Python中, JSON符号是内置与程序语言的. 压根不须要不论什么多余的软件. 在其它语言中, 仅仅须要少量的JSON特定的代码. 比方, JSON.org提供了一个仅仅包括三个类的包就能够使得Java语言支持JSON.

10)XML将数据的表示和数据的结构分开

XML须要将数据结构转换成文档结构. 这个映射是复杂的. JSON结构是基于数组和记录的. 那就是数据的组成. XML结构是基于元素(能够嵌套), 属性(不能嵌套), 原始蚊子, 实体, DTD和其它元数据结构.

11)一种通用的交换格式

JSON是一种更好的数据交换格式. XML是更好的文档交换格式. 用正确的工具做正确事.

12)一个数据多中展示

JSON不提供不论什么显示能力由于她不是文档标记语言.

13)自描写叙述数据

XML和JSON在这一点上是一样的.

14)全然集成全部传统数据库和格式

(关于XML的陈述有时有点夸张) XML文档能够包括不论什么能够想象的数据类型 - 从传统数据, 如文本和数字、多媒体对象, 如声音, 到活动格式, 如Java Applet 或者ActiveX 组件.

JSON没有<[CDATA[]]>特性, 因此她不适合用来承载声音或者图像或者其它大的二进制载荷. JSON为数据进行了优化. 此外, 在数据交换系统中提供可运行程序可能会引入危急的安全问题.

15)国际化

XML和JSON都用Unicode编码.

16)开放性和可扩展性

XML有一个开放的结构同意你在须要的时候加入其它国家的艺术元素. 这意味着你能够随时调整你的系统来接受特定行业的词汇.

这些词汇能够自己主动转换为JSON, 从XML迁移到JSON是非常简单的.

17)XML对于人类和机器阅读起来都非常easy.

JSON比XML更easy让人和机器阅读.

18)XML是面向对象的

其实, XML是面向文档的. JSON是面向数据的. JSON能够更easy的映射到面向对象的系统.

19)XML被计算机行业广泛的使用

JSON刚刚被大家所知. 她的简洁以及从非常easy从XML转换到JSON的特性使得JSON会更加被广泛的使用.

时间: 2024-10-04 19:21:44

Json学习一(基础概念知识学习)的相关文章

关系型数据库常用基础概念知识归纳

声明:我的文章都是只挑主要的写,次要细节太多,归纳就没意义了,同时归纳主要是给自己看的, 而且基本都是凭自己的一些记忆和理解即时写的.不一定对和全(但大多是一些需要理解的概念),请各位看管见谅! 数据库设计篇 1.范式 A.1范式,原子性,即列不可分 B.2范式,完全依赖,即有个主键唯一区分 C.3范式,不能传递依赖,即表中不能还有其他表的非主键信息 2.模型 A.概念模型,即ER图等 B.逻辑模型,即建逻辑表 C.物理模型,即生成物理表 事务 1.四大特性, A.原子,要么..要么.. B.隔

.net的基础概念知识

.Net的基础概念 .Net是指.net Framework框架,一种平台,一种技术: .Net分为.net Framework框架和.net平台:通俗点:.net平台相当于厨房,.net Framework框架相当于材料和做饭锅: .Net Framework框架是.Net平台中不缺少的一部分,他提供了一个稳定的运行环境保证我们基于.Net平台开发各种应用正常的运转. .Net的能做什么 1.桌面应用程序(winform应用程序) 2.Internet应用(ASP.Net) 比如:当当网.京东

git(学习之一)基础概念

Git学习笔记 ##################################################### qq:1218761836 qq群:150181442 ##################################################### 目录 Git. 1 一.关于版本控制... 1 二.本地版本控制系统... 1 三.集中式版本控制系统... 2 四.分布式版本管理控制系统... 3 五.Git的历史... 3 六.Git工作原理... 4 七

qml基础学习(一) 基础概念

一.概括 学习qt已有2年多的时间,从qt4.7开始使用直到现在正在使用的qt5.6,基本都在windows机器上做开发.最近有意向看了下qt的qml部分,觉着还是挺不错的,毕竟可以做嵌入式移动端产品的部分,还是值的一学.后来在网上看了一些资料,算是初步了解了下qml,所以想就自己学习的过程做以记录,也方便自己理解,如果你有机会看到这篇文章,那么我认为你也是来学习qml的,如果你已经是一个有很强qml开发经验的老手,那么这篇文章和接下来的qml学习系列的文章你都不用看下去了,呵呵... 关于qm

docker学习(1)----基础概念

转载请注明源文章出处:http://www.cnblogs.com/lighten/p/6841677.html 1.前言 docker的官网:这里.下一段摘自官网描述. docker是世界领先的软件容器平台.开发人员使用docker可以消除与同事的代码协作时产生的"在我机器上运行是正常的"等问题.运营商使用docker在独立的容器中运行和管理应用程序,以获得更好的计算密度.企业使用docker构建灵活的软件传送通道,可以更快,更安全地运行新功能,并且对于Linux和Windows S

IOS学习笔记 -- 基础MVC初学习

1. @property的参数说明ARC是苹果为了简化程序员对内存的管理,推出的一套内存管理机制使用ARC机制,对象的申请和释放工作会在运行时,由编译器自动在代码中添加retain和release1> strong:强指针引用的对象,在生命周期内不会被系统释放 在OC中,对象默认都是强指针2> weak:弱指针引用的对象,系统会立即释放 弱指针可以指向其他已经被强指针引用的对象 @property参数使用小结:1> 控件用weak2> 属性对象用strong3> 非对象类型用

[Django学习] Django基础(10)_ContentType学习总结

一. 什么是ContentTypes Django ContentTypes是由Django框架提供的一个核心功能.Django ContentTypes是一个记录了项目中所有model元数据的表,表中一条记录对应着一个存在的model. 当使用django-admin初始化一个django项目的时候,可以看到在默认的INSTALL_APPS已经包含了django.contrib.contenttypes: INSTALLED_APPS = [ 'django.contrib.admin', '

吴裕雄--天生自然Android开发学习:android开发知识学习思维导图

原文地址:https://www.cnblogs.com/tszr/p/12017363.html

【强化学习RL】必须知道的基础概念和MDP

本系列强化学习内容来源自对David Silver课程的学习 课程链接http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html 之前接触过RL(Reinforcement Learning) 并且在组会学习轮讲里讲过一次Policy Gradient,但是由于基础概念不清,虽然当时懂了 但随后很快就忘..虽然现在写这个系列有些晚(没有好好跟上知识潮流o(╥﹏╥)o),但希望能够系统的重新学一遍RL,达到遇到问题能够自动想RL的解决方法的程