您的位置:首页 > 职场人生

黑马程序员_Json学习笔记整理

2014-07-05 17:00 218 查看
------- android培训java培训、期待与您交流!
----------

JSON(JavaScript Object Notation)

一、基本介绍

Json基于纯文本,常存于txt文档

Json数据结构只有两种:对象和数组

Json数据结构可以嵌套,对象用{ }表示,数组用[ ]表示

1、对象(Map):无序的key:value集合

对象用{ }表示,key/value之间用逗号分隔,key/value用冒号分隔,比如:

{ “name”:”zhengzhongjie”,”age”:”24”,“Email“:”zzjie@163.com”}

2、数组(Array):值(value)的有序集合

数组用[ ]表示,值之间用逗号分隔,比如:

{“学生”:[{“姓名“:”张三”},{”姓名“:”李四“}]}

说明:json对象包括一个学生数组,而学生数组的值又是两个json对象

值(value):

值可以是双括号括起来的字符串,数值,true,false,null,对象或者数组

二、JSON-Lib

下表是Java和JavaScript类型对应表

net.sf.json中的核心类:

JSONArray,JSONObject,JSONNull,JSONFunction,JSONConfig,JSONSerializer

1、JSONSerializer:

在Java对象和JSON之间相互转换

成员方法:

Object toJava(JSON json):

Object toJava(JSON json,JsonConfigjsonConfig):

JSON toJson(Object object):

JSON toJson(Object object,JsonConfigjsonConfig):

使用时,将JSONArray类比Array,JSONObject类似Map

2、JSONArrayßàArray(跟数组和集合关联)

JSONArray是有序的值的集合,外部文本表现形式为[value1,value2],内部表现为get和opt方法通过角标索引值,element方法增加或取代值。

JSONArray的值(value):Boolean,JSONArray,JSONObject,Number,String,JSONNull

成员方法:

JSONArray():创建一个空JSONArray对象

toString():从JSONArray对象返回Json格式的字符串

add(intindex,Objectvalue):往JSONArray对象添加值(value)

get(intindex):获取值

opt(intindex):获取任意值

fromObject(Objectobject):从Java数组或集合对象创建JSONArray对象

3、JSONObjectßàMap(跟Map跟Bean关联)

JSONObject是无序的键值对的集合,外部文本表现形式为{key1:value1,key2:value2},内部表现为get和opt通过key方法获取value,put方法增加或取代值

JSONObject的值(value):Boolean,JSONArray,JSONObject,Number,String,JSONNull

成员方法:

put(Objectkey,Objectvalue):往JSONObject里面添加key:value对

fromObject(Objectobject):从Beans或Maps创建JSONObject对象,fromObjectaccepts JSON formatted strings, Maps, DynaBeans and JavaBeans

4、JSONFunction:

代表JavaScript函数的代码字符串

如果函数有参数,需要在JSONFunction中指定参数

5、JsonConfig:

成员方法:

setCycleDetectionStrategy:设置循环策略,比如设置循环策略为忽略,解决死循环问题

比如:config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

registerJsonValueProcessor:进行属性转换设置,比如:

三、JSON转换

1、从Java中的对象(数组、集合、Map,JavaBean对象)生成JSON对象

2、从JSON对象转换为Json格式的字符串

From Arrays and Collections to JSON

创建数组对象或集合对象,将对象作为参数传入fromObject,就根据它们创建了JSONArray对象,再由JSONArray对象返回Json格式的字符串,比如:

Arraysto JSON:

Collectionsto JSON:其中Student是JavaBean

From Maps and Beans to JSON

创建Map对象或JavaBean对象,将对象作为参数传入fromObject,就根据它们创建了JSONObject对象,再由JSONArray对象返回Json格式的字符串,比如:

Mapsto JSON:

Beansto JSON:

From Xml to JSON

在处理Xml时,需要添加“xom-1.2.8.jar“,地址:http://www.xom.nu/

在处理Xml时,用到类XMLSerializer,read(String xml)将字符串形式的xml序列化为JSON对象,默认情况下,XMLSerializer把每个元素当做string,除非指定type属性,所有的Xml属性有前缀‘@’,文本的属性值为‘#text’,比如:

输出结果:

From JSON to Arrays and Collection

JSON to Arrays:

定义Json数组格式的字符串json,调用JSONSerializer的toJSON方法,将json转化为JSON对象,再调用JSONSerializer的toJava方法,将JSON对象转化为Object对象,如:

JSON to Collections:

将JSON转化为Collection基本同上,只是在调用JSONSerializer的toJava方法时,将Object向下转型为List对象,如:

注意:

在从JSON转为数组或者集合时,Json的数据结构必须是数组

JSONArray的fromObject方法是基于JSONSerializer的toJSON方法

From JSON to Map and Bean

JSON to Map

定义Json对象格式的字符串,使用JSONSerializer的toJSON或者JSONObject的fromObject方法生成JSONObject对象

调用JSONObject的toBean方法,参数为JSONObject对象,Class对象,Map对象,比如:

JSON to Bean

基本同上,参数不同

如果要转化到的Bean类中含有类似List和Map这样的集合,要对集合进行处理,否则会报“net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXX”的异常,这里我产生异常的代码为:

处理方法1:

定义一个Map:

Map<String,Class>typeMap = new HashMap<String,Class>();

向typeMap中添加Bean中集合成员名和对应的类型

比如:typeMap.put(“element”,Element.class);

在调用JSONObject.toBean()时,加入typeMap参数

处理方法2:

当调用toBean时,集合中的值类型是DynaBean,而DynaBean不能转换为XXX,因此需要将DynaBean转换为XXX类型,因为JSONObject的fromObject能够接收DynaBean对象,因此先通过JSONObject的fromObject方法转化为JSONObject,再由JSONObject转化为XXX,代码如下:

From JSON to Xml

同样是使用XMLSerializer(在xml字符串和JSON对象之间进行转换)的write方法,将JSON对象写入Xml字符串,比如:

输出结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: