java JSONObject对象序列化与反序列化
2016-02-17 17:08
411 查看
commons-beanutils-1.7.0.jar
commons-httpclient-3.1.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
commons-collections-3.1.jar
ezmorph-1.0.6.jar (类型转换用)
这些包可以从一下地方下载:
http://commons.apache.org/index.html http://json-lib.sourceforge.net/ http://ezmorph.sourceforge.net/ http://www.docjar.com/
JSONObject json = JSONObject.fromObject(obj);//将java对象转换为json对象
String str = json.toString();//将json对象转换为字符串
JSONObject obj = new JSONObject().fromObject(jsonStr); //将json字符串转换为json对象,jsonStr为一个json字符串
将json对象转换为java对象(Person为实例类)
Person jb = (Person)JSONObject.toBean(obj,Person.class);//将建json对象转换为Person对象
注:反序列化时可能会遇到以下问题
JSONObject object = JSONObject.fromObject(user);
Object dep = object.get("department"); //get可获取某个节点的值
object.remove("department") //remove可以移除某个节点
object.element("test","test") //element可添加任意一个节点
问题1:时间格式转换出错 一般时间如("2016-02-16", "01/02/2016"或者其它 ),可用以下方法设置
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy/MM/dd","yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"}));
问题2:你会发现,如果Date为""时,转换会出错,这时就得修改源码了(网上找),或者把该节点移除(用remove()方法)
问题3:抽象类(abstract)是无法反序列化的,这时你得先取出该对象,然后再移除,最后使用子类转换
首先需要导入一下包
json-lib-2.3-jdk15.jarcommons-beanutils-1.7.0.jar
commons-httpclient-3.1.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
commons-collections-3.1.jar
ezmorph-1.0.6.jar (类型转换用)
这些包可以从一下地方下载:
http://commons.apache.org/index.html http://json-lib.sourceforge.net/ http://ezmorph.sourceforge.net/ http://www.docjar.com/
1.将java对象转换为json字符串(序列化)
先将java对象转换为json对象,在将json对象转换为json字符串JSONObject json = JSONObject.fromObject(obj);//将java对象转换为json对象
String str = json.toString();//将json对象转换为字符串
2.将json字符串转换为java对象(反序列化)
同样先将json字符串转换为json对象,再将json对象转换为java对象,如下所示。JSONObject obj = new JSONObject().fromObject(jsonStr); //将json字符串转换为json对象,jsonStr为一个json字符串
将json对象转换为java对象(Person为实例类)
Person jb = (Person)JSONObject.toBean(obj,Person.class);//将建json对象转换为Person对象
注:反序列化时可能会遇到以下问题
JSONObject object = JSONObject.fromObject(user);
Object dep = object.get("department"); //get可获取某个节点的值
object.remove("department") //remove可以移除某个节点
object.element("test","test") //element可添加任意一个节点
问题1:时间格式转换出错 一般时间如("2016-02-16", "01/02/2016"或者其它 ),可用以下方法设置
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy/MM/dd","yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"}));
问题2:你会发现,如果Date为""时,转换会出错,这时就得修改源码了(网上找),或者把该节点移除(用remove()方法)
问题3:抽象类(abstract)是无法反序列化的,这时你得先取出该对象,然后再移除,最后使用子类转换
<span style="font-family:Microsoft YaHei;font-size:14px;">
JSONObject object = JSONObject.fromObject(checkInfo.getInfo()); Object assetsObject = object.get("baseinfo"); JSONObject assetsJson = JSONObject.fromObject(assetsObject); //防止Date为""时反序列化出错 if(StringUtil.isNull(String.valueOf(assetsJson.get("firstDate")))){ assetsJson.remove("firstDate"); //为空时移除该节点 } if(StringUtil.isNull(String.valueOf(assetsJson.get("storeDate")))){ assetsJson.remove("storeDate"); } Object expands = assetsJson.get("expands"); Object currentCycle = assetsJson.get("currentCycle"); //currentCycle为抽象类,不能反序列化 assetsJson.remove("expands"); assetsJson.remove("currentCycle"); Map classMap = new HashMap(); classMap.put("expands", Set.class); //如果该对象为Set、Map等,则在这里声明 Assets assets = (Assets) JSONObject.toBean(assetsJson, Assets.class, classMap); JSONObject cycleJson = JSONObject.fromObject(currentCycle); Cycle cycle;</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">//由于父类为抽象类,这里使用子类进行转化
if(checkList.getAssets().getCurrentCycle() instanceof CyclePart){
cycle = (CyclePart) JSONObject.toBean(cycleJson, CyclePart.class);
}else if(checkList.getAssets().getCurrentCycle() instanceof CycleCar){
cycle = (CycleCar) JSONObject.toBean(cycleJson, CycleCar.class);
}else{
cycle = (CycleDevice) JSONObject.toBean(cycleJson, CycleDevice.class);
}
assets.setCurrentCycle(cycle);
checkList.setAssets(assets);</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">1. List集合转换成json代码 List list = new ArrayList(); list.add( "first" ); list.add( "second" ); JSONArray jsonArray2 = JSONArray.fromObject( list ); 2. Map集合转换成json代码 Map map = new HashMap(); map.put("name", "json"); map.put("bool", Boolean.TRUE); map.put("int", new Integer(1)); map.put("arr", new String[] { "a", "b" }); map.put("func", "function(i){ return this.arr[i]; }"); JSONObject json = JSONObject.fromObject(map); 3. Bean转换成json代码 JSONObject jsonObject = JSONObject.fromObject(new JsonBean()); 4. 数组转换成json代码 boolean[] boolArray = new boolean[] { true, false, true }; JSONArray jsonArray1 = JSONArray.fromObject(boolArray); 5. 一般数据转换成json代码 JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']" );</span>
相关文章推荐
- 使用objection来模块化开发iOS项目
- Objective-C 11 属性property
- 《转》Objective-C Runtime(4)- 成员变量与属性
- 《转》Objective-C Runtime(3)- 消息 和 Category
- 《转》Objective-C Runtime(2)- Object & Class & Meta Class
- 《转》Objective-C Runtime(1)- Self & Super
- 使用ObjectAnimator设置动画
- Objective-C中Self和Super详解
- objective-C学习 谓词NSPredicate 可过滤
- 关于MarshalByRefObject的解释
- CreateMutex、WaitForSingleObject、ReleaseMutex——创建互斥对象
- iOS开发之Objective-C与JavaScript交互操作
- objective-c Unicode转中文 重写NSLog
- setValue 和 setObject 的区别
- Object
- DOM (文档对象模型(Document Object Model))
- Coursera课程Python for everyone:Quiz: Object Oriented Programming
- 解决a different object with the same identifier value was already associated with the session错
- [ES7] Object.observe + Microtasks
- objective-C学习 NSUserDefaults 相当于缓存