Json数据整理(org-Json + json-lib)

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”:{“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。各有个的长处,各有各的缺点,选一种自己用着得心应手的就好了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值