Json数据整理(org-Json + json-lib)
2016-02-25 15:02
816 查看
1.org-json操作Json数据
Java对Json数据的处理主要有两种方法,一种是使用org.json的方法,这种方法所需要的jar比较少,操作简单,配置轻便,但是只能通过map来封装和解析Json,用的时候需要转换。还有一种是使用json-lib这中所需要的jar包比较多,配置起来比较麻烦,但是封装和解析Json数据比较方便,用着灵活性更高。下面对两种方法一一介绍一下。1.1封装自己想要的json
使用json.org.jar,首先在项目中导入json.org.jar包,然后就可以使用它封装和解析Json数据了,不要把Json想的太神奇,他就是一个很长的字符串,只不过JS处理的时候eavl()处理了一下把他序列化了,然后看代码首先是封装:public static void buildJson() throws JSONException{ Map<String, String> map1 = new HashMap<String, String>(); map1.put("name", "Alexia"); map1.put("sex", "female"); map1.put("age", "23"); Map<String, String> map2 = new HashMap<String, String>(); map2.put("name", "Edward"); map2.put("sex", "male"); map2.put("age", "24"); //是一个有序的序列值 JSONArray ja = new JSONArray(); ja.put(map1); ja.put(map2); ja.put(map1); System.out.println(ja.toString()); //是一个无序的键/值对集合。 JSONObject jo = new JSONObject(); jo.put("map1", map1); jo.put("map2", map2); jo.put("map3", map1); System.out.println(jo.toString()); //是一个用于快速构造JSON文本的工具 ,JSONWriter的子类 JSONStringer Jsonstringer = new JSONStringer(); Jsonstringer.object().key("session").value(ja).endObject(); System.out.println(Jsonstringer.toString()); }
输出的结果如下:
[{“name”:”Alexia”,”age”:”23”,”sex”:”female”},{“name”:”Edward”,”age”:”24”,”sex”:”male”},{“name”:”Alexia”,”age”:”23”,”sex”:”female”}]
{“map3”:{“
4000
name”:”Alexia”,”age”:”23”,”sex”:”female”},”map2”:{“name”:”Edward”,”age”:”24”,”sex”:”male”},”map1”:{“name”:”Alexia”,”age”:”23”,”sex”:”female”}}
{“session”:[{“name”:”Alexia”,”age”:”23”,”sex”:”female”},{“name”:”Edward”,”age”:”24”,”sex”:”male”},{“name”:”Alexia”,”age”:”23”,”sex”:”female”}]}
若是自己在前台用js写解析方法要注意了,虽然以上三种方法都能封装Json数据,但是只有JSONArray返回的带有[],是可以序列化的,其他的需要自己在两端加上[],进行序列化,然后在解析。
1.2后台代码解析Json数据
public static void parseJson() throws JSONException{ //假如前台传过来的Json是有序的 String arrayString = "[{'name':'Alexia','age':'23','sex':'female'},{'name':'Edward','age':'24','sex':'male'},{'name':'Alexia','age':'23','sex':'female'}]"; //带有[]的是有序的数据所以可以用对应的JSONArray来解析 JSONArray jsonarray = new JSONArray(arrayString); for(int i = 0; i < jsonarray.length(); i++){ //转换为Json对象 JSONObject jsonobj = jsonarray.getJSONObject(i); String name = jsonobj.getString("name"); int age = jsonobj.getInt("age"); System.out.println("name = " + name + ",age = " + age); } //假如前台传入的数据是混合 String objectString = "{'name':'zel','age':'18','arrayData':[{'id':1,'name':'小猪'},{'id':'2','name':'小猫'}]}"; JSONObject jo = new JSONObject(objectString); System.out.println("name = " +jo.get("name")+",age = "+jo.get("age")); JSONArray js = jo.getJSONArray("arrayData"); //此时能够得到一个有序的Json然后按照有序的方法进行处理 System.out.println(js.toString()); /*有序处理方法*/ //或者获取单个的JsonObject进行处理 for (int i = 0; i < js.length(); i++) { String arrayData = js.getString(i); System.out.println("(arrayData" + i + "):" + arrayData); } }
从上面可以看得出来,在处理有序数组时时很方便的,所以在前台js中封装Json时,尽量封装成有规律的数据格式,然后加上[]进行处理,另外JSONTokener也可以用于解析Json数据,感兴趣的可以在学习一下。
2.Json-lib操作Json数据
在上面已经说过了,用json.lib操作json是很灵活的,但是就是配置起来jar包太多,看起来挺沉重的,没有org.json看着轻便,但用起来确实很好使。
需要一下几个jar包
commons-lang 2.5
commons-beanutils 1.8.0
commons-collections 3.2.1
commons-logging 1.1.1
ezmorph 1.0.6
json-lib-2.2-jdk15
而且要注意这些jar包的版本信息,有些版本之间还是不兼容的,尤其是commons-lang我用3.0就会报错。有了这6个jar包就可以用了。
2.1各种类型数据的封装成Json
public static void buildJson(){ //将字符串转换Json数据 String str = "['你','好','世','界']"; JSONArray jsonArray1 = JSONArray.fromObject(str); System.out.println(jsonArray1); //["你","好","世","界"] //强实体类转换为json Employee em = new Employee(); em.setName("赵信"); em.setSex("男"); em.setAge(10); //这个地方也可以用JSONArray封装,只不过是多了个[],把他序列化了而已 //[{"sex":"男","name":"赵信","age":10}] JSONObject jsonObject1 = JSONObject.fromObject(em); System.out.println(jsonObject1); //{"sex":"男","name":"赵信","age":10} //将一般的数组转换成JSON boolean[] boolArray = new boolean[] { true, false, true }; JSONArray jsonArray2 = JSONArray.fromObject(boolArray); System.out.println(jsonArray2); //[true,false,true] //将Collection对象转换成JSON ArrayList<Object> list = new ArrayList<Object>(); list.add("first"); list.add(em); JSONArray jsonArray3 = JSONArray.fromObject(list); System.out.println(jsonArray3); //将Map转换成JSON Map<String, Object> map = new HashMap<String, Object>(); map.put("List", list); map.put("Bean", em); JSONObject jsonObject2 = JSONObject.fromObject(map); System.out.println(jsonObject2); }
2.2 Json数据解析
public static void parseJson(){ //Json转换为Arrays String str = "['first','second']"; JSONArray ja1 = (JSONArray) JSONSerializer.toJSON(str); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY); Object[] output = (Object[]) JSONSerializer.toJava(ja1, jsonConfig); System.out.println(output[0]); //Json转换为Collections String json2 = "[{'age':10,'sex':'男','name':'赵信'},{'age':11,'sex':'女','name':'德玛'}]"; JSONArray ja2 = JSONArray.fromObject(json2); @SuppressWarnings("unchecked") List<Employee> emlist = (List<Employee>) JSONArray.toCollection(ja2, Employee.class); System.out.println(emlist.get(1).getName()); //Json转换为Map String json3 = "{'zhaoxin':{'age':10,'sex':'男','name':'赵信'},'gailun':{'age':11,'sex':'女','name':'德玛'}}"; JSONObject j03 = JSONObject.fromObject(json3); Map<String,Object> mapobject3 =new HashMap<String,Object>(); @SuppressWarnings("unchecked") Map<String,Employee> out = (Map<String,Employee>)JSONObject.toBean(j03,Map.class,mapobject3); System.out.println(out.get("zhaoxin")); }
可以看得出来Json-lib在解析Json数据时也是十分强大的,但是看着有点繁琐累赘,回过头在看org-json就显得很明了轻便了,但是很明显在功能上Json-lib是可以碾压org-json。各有个的长处,各有各的缺点,选一种自己用着得心应手的就好了。
相关文章推荐
- 深度复制JavaScript对象
- js中关于事件捕获与事件冒泡的小实验
- javascript之点击按钮实现放大、缩小字体
- js 动态生成JSON
- javascript动态加载js文件
- jsp+ajax局部刷新校验验证码,onblur触发校验
- 13.5.2.javascript内存与性能与13.6事件模拟
- 网页中通过js修改img的src属性刷新图片时,图片缓存问题现象表述及问题解决
- 基于javascript实现动态时钟效果
- javascript客户端保存cookie实现记住密码功能
- JS正则表达式详解
- js 日期格式 转换 yyyy-MM-dd
- prototype本质上还是一个JavaScript对象。 并且每个函数都有一个默认的prototype属性。
- JavaScript中typeof的用法
- 定义提升(1)
- 纯原生JS轮播图片
- js中和数据类型相关的函数
- js data日期初始化的5种方法
- JS Encode and Decode URL
- JS备忘--子父页面获取元素属性、显示时间,iframe之间互相调用函数