黑马程序员_Json学习笔记整理
来源:互联网 发布:淘宝怎么买百度云账号 编辑:程序博客网 时间:2024/06/05 18:28
------- 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字符串,比如:
输出结果:
- 黑马程序员_Json学习笔记整理
- 黑马程序员---学习整理
- json的学习笔记_json必知必会
- 黑马程序员——java高新技术1学习笔记整理
- 黑马程序员——java高新技术2学习笔记整理
- 黑马程序员 java学习笔记 Day12:java中的IO整理
- 黑马程序员---学习笔记
- 黑马程序员----学习笔记
- 黑马程序员----学习笔记
- 黑马程序员---学习笔记
- 黑马程序员----(笔记整理-------高薪课程一)
- 黑马程序员-------笔记整理(高薪课程二)
- 黑马程序员 String类的笔记整理
- 黑马程序员 集合类的笔记整理
- 黑马程序员——多线程-整理笔记
- 黑马程序员——泛型-整理笔记
- python_python学习_Json
- 黑马程序员之SQL学习笔记:sql 整理的一些笔记
- 黑马程序员_Java网络编程整理
- hdu-4724-How Long Do You Have to Draw-贪心
- 二进制和位运算
- Struts2自定义Action,自定义方法,DMI(动态方法调用),路径问题
- HDU 4597 Play Game
- 黑马程序员_Json学习笔记整理
- python基础教程_学习笔记20:标准库:一些最爱——os
- No Session found for current thread
- iosLearingDiary_CGContextAddArc
- android XMPP 开发总结(一)开发环境
- UVa 127 - "Accordian" Patience POJ 1214 链表题解
- fastjson 介绍
- http://www.xiachufang.com/cook/101814661/
- 黑马程序员-继承,组合,super,多态