您的位置:首页 > Web前端 > JavaScript

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。各有个的长处,各有各的缺点,选一种自己用着得心应手的就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: