javaEE 第七篇博客----JSON

一、JSON基本介绍:

1、JSON是一种基于文本的数据交换格式,它来自于web服务和其他连接应用程序中使用的JavaScript

2、JSON只定义了两个数据结构:对象和数组。对象是一组名称-值对,数组是值的列表。JSON定义了7种值类型:string、number、object、array、true、false和null。

3、JSON通常被用作一种常见的格式,用于序列化和反序列化在Internet上通信的应用程序中的数据。这些应用程序是使用不同的编程语言创建的,并且在非常不同的环境中运行。JSON适合这个场景,因为它是一个开放的标准,它很容易读和写,而且它比其他表示更紧凑。

4、JSON表示通常比XML表示更紧凑,因为JSON没有结束标记。与XML不同,JSON并没有一个广泛接受的模式来定义和验证JSON数据的结构。

5、对象模型创建了一个在内存中表示JSON数据的树。然后可以对树进行导航、分析或修改。这种方法是最灵活的,允许进行处理,这需要访问树的完整内容。但是,它通常比流模型要慢,需要更多的内存。对象模型通过一次导航整个树来生成JSON输出。

6、流模型使用基于事件的解析器,每次只读取一个元素的JSON数据。当一个对象或数组开始或结束时,当它找到一个键,或者当它找到一个值时,解析器会生成事件并停止处理。应用程序代码可以处理或丢弃每个元素,然后解析器继续进行下一个事件。这种方法适合于本地处理,其中一个元素的处理不需要来自其他数据的信息。流模型通过一次使用一个元素调用一个函数来生成JSON输出到给定的流。

JSON建构于两种结构:

“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

1.对简单数据类型的encoding和decoding:

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

print json.dumps([‘foo‘,{‘bar‘:(‘baz‘,None,1.0,2)}])

print json.dumps("\"foo\bar")

print json.dumps(u‘\u1234‘)

print json.dumps(‘\\‘)

print json.dumps({"c":0,"b":0,"a":0},sort_keys=True)

输出:

["foo", {"bar": ["baz", null, 1.0, 2]}]

"\"foo\bar"

"\u1234"

"\\"

{"a": 0, "b": 0, "c": 0}

compact encoding:

#json主要是作为一种数据通信的格式存在的,而网络通信是很在乎数据的大小的,无用的空格会占据很多通信带宽,所以适当时候也要对数据进行压缩。separator参数可以起到这样的作用,该参数传递是一个元组,包含分割对象的字符串。

print json.dumps([1,2,3,{‘4‘:5,‘6‘:7}],separators=(‘,‘,‘:‘))

#indent参数是缩进的意思,它可以使得数据存储的格式变得更加优雅。

print json.dumps([1,2,3,{‘4‘:5,‘6‘:7}],separators=(‘,‘,‘:‘),indent = 4)

2.decoding JSON

json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])www.2cto.com

print json.loads(‘["foo",{"bar":["baz",null,1.0,2]}]‘)

print json.loads(‘"\\"foo\\bar"‘)

输出:

[u‘foo‘, {u‘bar‘: [u‘baz‘, None, 1.0, 2]}]

"foar

3.特殊JSON对象的解析

def as_complex(dct):

if ‘__complex__‘ in dct:

return complex(dct[‘real‘],dct[‘imag‘])

return dct

print json.loads(‘{"__complex__":true,"real":1,"imag":2}‘,object_hook=as_complex)

输出:

(1+2j)

原文地址:https://www.cnblogs.com/selfTboke/p/8906907.html

时间: 2024-10-07 18:56:04

javaEE 第七篇博客----JSON的相关文章

javaEE 第五篇博客----Applets & Ajax

一 Applet Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同. 含有Applet的网页的HTML文件代码中部带有<applet> 和</applet>这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小应用 程序代码并在本地计算机上执行该Applet. 1 工作原理 Java Applet 可以大大提高Web页面的交互能力和动态执行能力.包含Applet的网页被

我的第一篇博客《Hello World》

Hello World! 大家好,这是我的第一篇博客. 作为一名程序员,为了保持优良的传统,所以就从Hello World 开始吧. 简单的介绍 关于名字 本人呢不太会起名字,试了好多个都被占用了,受一本小说影响,所以就起了这个名字. 同时呢,大家可以叫我铵静,做一个铵静的美男子哈. “高手有一颗寂寞的心,因为高手的造就本就是用寂寞堆积而成” —— <高手寂寞> 作者:兰帝魅晨 我的日常 目前主要从事Java EE企业级应用开发相关工作,业余时对网络安全比较感兴趣.周末主要是看看书,听听歌,偶

一篇博客分清shell中的状态返回值-return-break-continue-exit

一篇博客分清shell中的状态返回值-return-break-continue-exit 一.break.continue.exit.return的区别和对比 条件与循环控制及程序返回值命令知识表 命令 说明 break n 如果省略n,则表示跳出整个循环,n表示跳出循环的层数 continue n 如果省略n,则表示跳出本次循环,忽略本次循环剩余代码,进入循环的下一次循环.n表示退到第n层继续循环 exit n 表示退出当前shell程序,n为上一次程序执行的状态返回值,n也可以省略,在下一

第一篇博客——基于数组的优先队列(java版)

看过园子里和CSND上那么多大牛精彩的博客后,早就按捺不住想亲手写上几篇.奈何每次坐在电脑前准备敲字的时候,立马赶到浑身不自在,无从下手.实在是因为自高考之后,大学以来,本人几乎就再没动笔写过一篇文字,写作水平退化实在严重.今天鼓起勇气开始写作博客,一方面希望通过多写慢慢地找回写作的感觉,一方面也希望通过博客和大家多多交流,共同进步. 既然是第一次试手,就写个简单易懂的内容——优先队列. 话不多说,先上代码. 1 /** 2 * @author Mr Left 3 * @version 1.0

一篇博客让你了解RxJava

RxJava可以说是2016年最流行的项目之一了,最近也接触了一下RxJava,于是想写一篇博客,希望能通过这篇博客让大家能对其进行了解,本篇博客是基于RxJava2.0,跟RxJava1.0还是有很多不同的 基础知识 RxJava的核心就是"异步"两个字,其最关键的东西就是两个: Observable(被观察者) Observer/Subscriber(观察者) Observable可以发出一系列的 事件,这里的事件可以是任何东西,例如网络请求.复杂计算处理.数据库操作.文件操作等等

[iOS]关于 App 混合(Hybrid)开发的优化,包括H5、Weex等(本篇博客主要针对 iOS 应用讲解,但该思想同样适用于Android)

我们知道混合开发,可以节省很多成本(时间成本,经济成本等等),所以有很多公司比较钟爱这种开发形式,今天所讲的优化方式,也是我在我们公司的应用中实际用了的,而且我写的这个优化的 SDK 已经开源到 github 上了,有兴趣的同学可以下载来看一下,有不足的地方欢迎指正.这里给出链接:https://. 转载请注明出处:http://www.cnblogs.com/shisishao/p/6830736.html -.首先,先介绍下什么是混合开发: 我们通常把移动开发分为Web.Native和Hyb

一篇博客彻底了解Android广播机制

首发于http://blog.csdn.net/pwiling/article/details/47682413,禁止转载 之前数次在程序中碰到Android广播,总是有这个疑问:往往是在发送广播的activity里面进行动态注册,动态注册必须要获得BroadcastReceiver对象,既然我们已经获得了广播接受器的对象,为何还要发送广播,直接用广播接收器的对象调用里面的相关逻辑处理的方法,不行吗?为什么还要绕这么一大圈用广播呢? 以前都是走马观花,这次弄清楚了.在解答这个问题之前,我们首先来

我的第一篇博客记录我的IOS生涯

这是我的第一篇博客,只为了记录我在IOS开发旅程中得成长之路,一直觉得能发表几百篇的都是大牛,一直都是我崇拜的对象,我希望现在的一小步能成为将来的一大步,坚持每天发表一篇博文,养成一个良好的每天学习新知识的习惯,希望多年以后点开这第一篇博客能感叹当初的自己是多么的幼稚,但也感谢当年的坚持!come on!活着就是为了改变世界!

这篇 博客将讲解如何删除目录以及删除文

这篇 博客将讲解如何删除目录以及删除文件. 删除目录:rmdir (remove directory) 可以使用rmdir 命令删除一个目录.必须离开目录,并且目录必须为空目录,不然提示删除失败. 例:在目录B下,有一个C文件夹,我们mkdir D 创建一个新的文件夹D,在使用rmdir D 删除文件夹D,显示结果如下: 在下例中,我们想要删除文件夹C,命令行上输入rmdir C ,结果如下,会发现出现,rmdir: failed to remove `C': Directory not emp