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会更加被广泛的使用.

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

  1. 前端学习:JS面向对象知识学习(图解)

    前端学习:JS面向对象知识学习(图解) 前端学习:JS(面向对象)代码笔记 JS面向对象图解知识全览 创建类和对象 方式1:使用Object()函数 方式2:使用自变量 方式3:使用工厂函数 创建多个 ...

  2. lua学习之基础概念篇

    基础概念 程序块 (chunk) 定义 lua 中的每一个源代码文件或在交互模式(Cmd)中输入的一行代码都称之为程序块 一个程序块就是一连串语句或者命令 lua 中连续的语句不需要分隔符,但为了可读 ...

  3. Java基础学习之基础概念与环境搭建(1)

    1.Java基础概念 1.1.Java语言的特点 Java语言是简单易学的 Java语言是面向对象(封装.继承和多态) Java语言是平台无关的(一次编译,到处运行) Java语言是可靠的.安全的(异 ...

  4. kettle基础概念的学习

    参考书籍:Pentaho Kettle Solutions中文版.由于最近不断的使用kettle,随着不断深入使用,遇到的问题越来越多,发现脑子那点货根本不够用,所以根据阅读把一些概念记录一下,方便自 ...

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

    转载请注明源文章出处:http://www.cnblogs.com/lighten/p/6841677.html 1.前言 docker的官网:这里.下一段摘自官网描述. docker是世界领先的软件 ...

  6. Kubernetes学习之基础概念

    本文章目录 kubernetes特性 kubernetes集群架构与组件 一.kubernetes集群架构 二.集群组件 三.ubernetes集群术语 深入理解Pod对象 一.Pod容器分类 基础容 ...

  7. Vue基础概念,学习环境等

    前提: 你已有 HTML.CSS 和 JavaScript 中级前端知识. 概念: Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vu ...

  8. MongoDB学习笔记-基础概念

    mongodb中基本的概念 文档.集合.数据库 与关系数据库的概念对比更容易理解

  9. git学习记录——基础概念和文件的基本操作

    夸一下git git是当前世界上最先进的分布式版本控制系统 优势: 1.不必联网 2.Git极其强大的分支管理,把SVN等远远抛在了后面. 集中式的代表CVS和SVN 分布式的代表BitKeeper, ...

随机推荐

  1. 子墨庖丁Android的ActionBar源代码分析 (一)实例化

    假设你从事过Androidclient开发,相信你对ActionBar这套框架并不陌生,或者说你并不了解它,可是你应该时不时的要跟它打交道.抛开ActionBar的实现不说,ActionBar实际上是 ...

  2. 通达OA 在工作流中直接查询表单内容的开发尝试(图文)

    一个朋友提出要在工作里直接查询表单内容的需求,原来他们把工作流当做业务系统来用.也算把工作流用到极致了.为了实现像软件里直接的查询功能,他想在办理工作流的时候直接能查询到表单里面的内容. 通过研究通达 ...

  3. vim-snipmate编写snippet的语法

    vim-snipmate真的很好用,以前好多编写代码的问题得到完美的解决.还附带提升我对vim的理解和信心,在这里感谢一下作者.thank you. 1.现说一下我浓缩的重要语法. 1.定义是下面这样 ...

  4. C++虚函数表与虚析构函数

    1.静态联编和动态联编联编:将源代码中的函数调用解释为要执行函数代码. 静态联编:编译时能确定唯一函数.在C中,每个函数名都能确定唯一的函数代码.在C++中,因为有函数重载,编译器须根据函数名,参数才 ...

  5. Python中赋值、浅拷贝与深拷贝

    python中关于对象复制有三种类型的使用方式,赋值.浅拷贝与深拷贝.他们既有区别又有联系,刚好最近碰到这一类的问题,研究下. 一.赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不 ...

  6. 如何让在Html中特殊字符被数据加载时对于html标签的自动转义 补充

    1.将此过滤器添加到ng-bind-html所绑定的数据中,便实现了在数据加载时对于html标签的自动转义. <div ng-repeat="item in list" &g ...

  7. [转]解决 Eclipse项目红感叹号

    原文地址:http://www.cnblogs.com/hakuci/archive/2012/01/06/2314143.html 原因:显示红色感叹号是因为jar包的路径不对 解决:在项目上右击B ...

  8. jfinal渲染器FileRender完整路径文件不正确的问题

    jfinal作者的建议如下: 完整分支的文件下载,可以使用那个带 File 参数的构造方法:FileRender(new File(完整路径)) 从而可以使用 renderFile(new File( ...

  9. vue项目引入社交分享插件

    vshare 基于百度分享开发的支持VUE2.X的分享插件,为您带来更多的流量!提供多种风格按钮,代码加载更快,引入社会化流量,提升网页抓取速度等优点.github地址:https://github. ...

  10. HTTP小结

    http 一.HTTP协议简介 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交 ...