黑马程序员_Json学习笔记整理
2014-07-05 17:00
218 查看
------- android培训、java培训、期待与您交流!
----------
JSON(JavaScript Object Notation)
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,对象或者数组
net.sf.json中的核心类:
JSONArray,JSONObject,JSONNull,JSONFunction,JSONConfig,JSONSerializer
成员方法:
Object toJava(JSON json):
Object toJava(JSON json,JsonConfigjsonConfig):
JSON toJson(Object object):
JSON toJson(Object object,JsonConfigjsonConfig):
使用时,将JSONArray类比Array,JSONObject类似Map
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对象
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
如果函数有参数,需要在JSONFunction中指定参数
setCycleDetectionStrategy:设置循环策略,比如设置循环策略为忽略,解决死循环问题
比如:config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
registerJsonValueProcessor:进行属性转换设置,比如:
2、从JSON对象转换为Json格式的字符串
Arraysto JSON:
Collectionsto JSON:其中Student是JavaBean
Mapsto JSON:
Beansto JSON:
在处理Xml时,用到类XMLSerializer,read(String xml)将字符串形式的xml序列化为JSON对象,默认情况下,XMLSerializer把每个元素当做string,除非指定type属性,所有的Xml属性有前缀‘@’,文本的属性值为‘#text’,比如:
输出结果:
定义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方法
定义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,代码如下:
输出结果:
----------
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字符串,比如:输出结果:
相关文章推荐
- 黑马程序员之 C#学习笔记:关于json在客户端解析汉字为ASCII码的解析
- 整理一下当年的学习笔记之:ajax请求json和普通项
- 黑马程序员之SQL学习笔记:sql 整理的一些笔记
- 黑马程序员-SQL学习笔记整理 内容主要来源于 .NET培训课件
- 黑马程序员——JAVA学习整理笔记——常用类库
- 黑马程序员——学习笔记1——基础教程整理
- JSON学习笔记整理一
- 黑马程序员——java高新技术2学习笔记整理
- 黑马程序员 java学习笔记 Day12:java中的IO整理
- Java网络编程---I/O部分学习笔记整理
- C语言学习笔记整理
- JSON学习笔记
- GTK+图形化应用程序开发学习笔记整理[zt]
- C# 参考:反射 -- 学习笔记整理,概念与应用
- 整理JAVA学习笔记 JAVA基础需要掌握重点
- C语言学习笔记整理
- solaris 10 学习笔记收集整理
- 计算机软件测试技术学习笔记(整理)
- DWR util.js 学习笔记 整理
- JSON学习个人笔记(一)