json数据结构
JSON即JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合服务器与JavaScript的交互。JSON易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立语言的文本格式,但是也是用了类似于C语言家族的习惯(包括C,C++,C#,JAVA,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。
XML也是一种数据交换格式,不过XML标记比较多,往往使得标记比需要传递的数据都还多,这样会增加字符传输的负担。
JSON建构于两种结构:
1.“名称/值”对的集合(A collection of name/value pairs).不同的语言中,它被理解为对象(Object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。
2.值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
Python的json模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多。 下面演示如何将一个Python数据结构转换为JSON:
import
json
data
=
{
'name'
:
'ACME'
,
'shares'
:
100
,
'price'
:
542.23
}
json_str
=
json.dumps(data)
# Writing JSON data
with
open
(
'data.json'
,
'w'
) as f:
json.dump(data, f)
# Reading data back
with
open
(
'data.json'
,
'r'
) as f:
data
=
json.load(f)
json.dumps 与 json.loads 实例
以下实例演示了 Python 数据结构转换为JSON:
#!/usr/bin/python3 import json # Python 字典类型转换为 JSON 对象
data = {
'no' : 1,
'name' : 'W3CSchool',
'url' : 'http://www.w3cschool.cn'
} json_str = json.dumps(data)
print ("Python 原始数据:", repr(data))
print ("JSON 对象:", json_str)
执行以上代码输出结果为:
Python 原始数据: {'url': 'http://www.w3cschool.cn', 'no': 1, 'name': 'W3CSchool'}
JSON 对象: {"url": "http://www.w3cschool.cn", "no": 1, "name": "W3CSchool"}
通过输出的结果可以看出,简单类型通过编码后跟其原始的repr()输出结果非常相似。
接着以上实例,我们可以将一个JSON编码的字符串转换回一个Python数据结构:
#!/usr/bin/python3 import json # Python 字典类型转换为 JSON 对象
data1 = {
'no' : 1,
'name' : 'W3CSchool',
'url' : 'http://www.w3cschool.cn'
} json_str = json.dumps(data1)
print ("Python 原始数据:", repr(data1))
print ("JSON 对象:", json_str) # 将 JSON 对象转换为 Python 字典
data2 = json.loads(json_str)
print ("data2['name']: ", data2['name'])
print ("data2['url']: ", data2['url'])
执行以上代码输出结果为:
ython 原始数据: {'name': 'W3CSchool', 'no': 1, 'url': 'http://www.w3cschool.cn'}
JSON 对象: {"name": "W3CSchool", "no": 1, "url": "http://www.w3cschool.cn"}
data2['name']: W3CSchool
data2['url']: http://www.w3cschool.cn
如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。例如:
# 写入 JSON 数据
with open('data.json', 'w') as f:
json.dump(data, f) # 读取数据
with open('data.json', 'r') as f:
data = json.load(f)
3 一般 XML 文档 (XML Document)
4 举例 :
<student> 【标签,表示开始】
<name>你</name>
<hobby>女</hobby>
</student> 【标签,表示结束】
5 XML 文档的语法:
5.1 文档声明:在 XML 文档最前面,必须写一个文档声明
a 最简单的声明 :<?xml version = "1.0"?>
b 用encoding 属性,来说明文档字符编码:<?xml version = "1.0" encoding = "UTF-8"?>
5.2 元素(Element):一个元素,会包含一个开始标签和一个结束标签
a 有所有内容:<name>你</name>
b 无元素内容:<name></name>
而且一个元素可嵌套若干个子元素,但不能出现交叉嵌套
<students>
<student> 【标签,表示开始】
<name>你</name>
<hobby>女</hobby>
</student> 【标签,表示结束】
<stdudents>
** 注意 : 1 规范的 XML 文档最多只有一个根元素,其他的都是根元素的子孙元素。
2 在 XML 中,空格和换行,都会被当做具体内容去处理,例如: a和b 是不一样的
a <name>你</name>
b <name>
你
</name>
5.3 属性(Atribute):一个元素可以拥有多个属性,例如
<video name="小黄人" hobby="apple"/>【video 元素拥有 name,hobby两个属性】
*注意 : 属性的值必须用 "" 或者 '' 括住
*属性表示的信息,也可用子元素来表示,例如:
<video>
<name>小黄人</name>
<hobby>apple</hobby>
</video>
6 对 XML 文档的解析:
提取 name 元素里面的内容:<name>小黄人</name>
或者是提取 video 元素中 name 和 hobby 的值 :<video name="小黄人" hobby="apple"/>
7 --- SAX 解析 ---- Simple API for XML
SAX: 基于事件驱动的解析方式,逐行解析数据(采用协议回调机制)
<student>
<name>你</name>
<hobby>女</hobby>
</student>
</students>
a 解析方式,逐行进行解析。
a.1 打开 XML 文档
a.2 开始节点(开始标签)
a.3 逐行进行解析
a.4 发现元素里面的内容
a.5 提取内容
a.6 结束节点(结束标签)
a.7 循环开始,直到遇到 根元素的结束标签,解析才彻底结束
b.1 苹果原生: NSXMLParser -- SAX 方式解析,使用简单
b.2 第三方框架:
b JSON 中的方括号 [], 在OC 中表示 NSArray
1> XML
优点:\u2028
格式统一, 符合标准\u2028
容易与其他系统进行远程交互, 数据共享比较方便
\u2028 缺点:
XML文件格式文件庞大, 格式复杂, 传输占用带宽\u2028
服务器端和客户端都需要花费大量代码来解析XML, 不论服务器端和客户端代码变的异常复杂和不容易维护
客户端不同,浏览器之间解析XML的方式不一致, 需要重复编写很多代码\u2028
服务器端 和 客户端 解析XML花费资源和时间
2> JSON
优点:\u2028
数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小\u2028
易于解析这种语言
支持多种语言, 包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等语言服务器端语言, 便于服务器端的解析\u2028
因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护\u2028
缺点:\u2028
没有XML格式这么推广的深入人心和使用广泛, 没有XML那么通用性\u2028
JSON格式目前在Web Service中推广还属于初级阶段
2.JSON、XML解析方式的底层实现
1> XML
Xml两种解析方式,DOM 和 SAX。
DOM 需要读入整个XML文档(文档驱动),SAX 是事件驱动的,并不需要读入整个文档,文档的读入过程也就是SAX的解析过程。
SAX 简单地说就是对XML文档进行顺序扫描,当扫描到 文档 的 开始 与 结束 ,元素(element)的 开始 与 结束 时,就会触发相应的事件处理 函数,由事件处理函数做相应的动作,处理完后继续扫描,直到文档结束,则解析完毕
DOM 解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许你使用 DOM API 操作 XML 树。也就是说,DOM 会把XML以 树 的形式读取到内存中,然后在通过相应的 API 来操作这个 XML树,从而达到解析XML文件的目的
2> JSON
json底层原理 遍历字符串中的字符,最终根据特助字符,比如{},[],:号等进行区分,{}是字典,[]表示的是数组,:号是字典的键和值的分水岭,最后是将json数据转化为字典,然后使用 KVC 将字典转为 model
1)对于复杂的数据结构使用XML,简单的数据结构可采用JSON。
2)在互联网应用中数据传输中,提倡使用JSON。
json数据结构的更多相关文章
- 数据解析(XML和JSON数据结构)
一 解析 二 XML数据结构 三 JSON 数据结构 一 解析 1 定义: 从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照 ...
- 查询json数据结构的8种方式
查询json数据结构的8种方式 你有没有对“在复杂的JSON数据结构中查找匹配内容”而烦恼.这里有8种不同的方式可以做到: JsonSQL JsonSQL实现了使用SQL select语句在json数 ...
- 【JAVAWEB学习笔记】28_jquery加强:json数据结构、jquery的ajax操作和表单校验插件
Ajax-jqueryAjax 今天内容: 1.json数据结构(重点) 2.jquery的ajax操作(重点) 3.jquery的插件使用 一.json数据结构 1.什么是json JSON(Jav ...
- 【JAVAWEB学习笔记】28_jqueryAjax:json数据结构、jquery的ajax操作和表单校验插件
Ajax-jqueryAjax 今天内容: 1.json数据结构(重点) 2.jquery的ajax操作(重点) 3.jquery的插件使用 一.json数据结构 1.什么是json JSON(J ...
- postman参数为Json数据结构
本文主要postman字段为Json结构时的操作说明 本文以订单发货为例,根据接口文档去设计 用户下单接口字段如图: 有两种方式可以将字段Json数据传递: 下图为接口字段规则: 接口为post请求方 ...
- [转载]查询json数据结构的8种方式
http://wangxinghaoaccp.blog.163.com/blog/static/1158102362012111812255980/ 你有没有对“在复杂的JSON数据结构中查找匹配内容 ...
- 个人永久性免费-Excel催化剂功能第90波-xml与json数据结构转换表格结构
在网络时代,大量的数据交互以xml和json格式提供,特别是系统间的数据交互和网络WebAPI.WebService接口的数据提供,都是通过结构化的xml或json提供给其他应用调用返回数据.若能提供 ...
- JSON —— 数据结构
1.什么是 JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C ...
- Excel表格转Json数据结构
Excel表格转Json数据结构 辗转了好几个项目,每个项目的导表工具都巨难用,速度慢,潜规则多,扩展性差,不易于调试.Sqlite,Json,Lua,Xml各种格式都用过. 举个例子: 大多数导表工 ...
随机推荐
- yii2 basic 简洁安装教程
虽然yii官网上说叫咱们用composer安装来安装,但是鄙人感觉这样的安装方式会将自己写的代码共享到github中,因此不太建议大家这样用.下面来给大家介绍basic简洁的安装方法. 第一步,下载b ...
- jquery js 动态加载 js文件
jquery方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- (转)ThreadLocal
转自:http://blog.csdn.net/lufeng20/article/details/24314381 Thread同步机制的比较 ThreadLocal和线程同步机制相比有什么优势呢?T ...
- vmware 虚拟机下 ubuntu 与主机共享锐捷
一直以来.想要学习 linux ,在 vm 虚拟机下安装了 ubuntu 系统. 可是这个系统并不能上网.原因就是 vm 虚拟机的虚拟网卡会和锐捷冲突.锐捷会检測到多网卡,断开网络,所以不得不禁用 v ...
- windows查看进程线程的命令pslist
pslist是用命令行查看线程:ProcessExplorer是图形化的查看线程,都在附件中. 1.查看进程 tasklist or pslist -t Name ...
- 简易新闻网站NewsWeb-网页抓取
本文转载自姚虎才子 今天做项目时用到java抓取网页内容,本以为很简单的一件事但是还是让我蛋疼了一会,网上资料一大堆但是都是通过url抓取网页内容,但是我要的是读取本地的html页面内容的方法,网上找 ...
- NATS源代码之logger目录
nats的logger目录文件如下 log.go syslog.go syslog_windows.go 基于golang语言的logger包实现日志功能. Golang的log包短小精悍,可以非常轻 ...
- js一个数组变为指定长度的多个数组
var dataArr = [0,1,2,3,4,5,6,7,8,9,10]; var newArr = []; var s = parseInt(dataArr.length / 4); var n ...
- 讨论cocos2d-x字体绘制原理和应用方案
转自:http://blog.csdn.net/langresser_king/article/details/9012789 个人一直认为,文字绘制是cocos2d-x最薄弱的环节.对于愤怒的小鸟之 ...
- JavaServlet实现下载功能
我们在项目中经常会用到下载功能,所以今天我们先说下下载功能实现的思路,然后通过一个案例代码来具体体现. 1.下载的思路: ①首先要获取我们要操作的文件对象的路径 ②然后使用获取的文件对象路径构 ...