在用ajax读取数据时,反回xml文件未免太过麻烦,json成了我们不二的选择,当然了,不二也可以理解为是很二的选择,因为json数据简单明了易于解析,在这里介绍几个常用的解析方法:
为了测试方便首先声明了一个学生类,了为与SSH框架成,进行了关联映射,使之符号我们开发环境中遇到的问题
import java.util.Date;
public class Stu {
private int id;
private String name;
private int age;
private Date birDate;
private Classes classes;// 班级对象
public Classes getClasses() {
return classes;
}
public void setClasses(Classes classes)
{
this.classes = classes;
}
public Date getBirDate() {
return birDate;
}
public void setBirDate(Date birDate) {
this.birDate = birDate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
而后又声明了一个班级类
import java.util.Set;
public class Classes {
private int id;
private String name;
private Set<Stu>
stus;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Stu>
getStus() {
return stus;
}
public void
setStus(Set<Stu> stus) {
this.stus = stus;
}
}
最后,看一下测试类解析事例,用JAVA自带的类进行转换需引入json-lib-2.****.jar相关jar:
public static void main(String[] args) {
Classes classes=new
Classes();
classes.setId(1);
classes.setName("TS980");
Classes classes1=new
Classes();
classes.setId(2);
classes.setName("SS980");
Classes classes2=new
Classes();
classes.setId(3);
classes.setName("DS980");
Stu stu=new Stu();
stu.setId(1);
stu.setName("小白");
stu.setAge(20);
stu.setClasses(classes);
Stu stu1=new Stu();
stu1.setId(1);
stu1.setName("小强");
stu1.setAge(12);
Stu stu2=new Stu();
stu2.setId(1);
stu2.setName("小黑");
stu2.setAge(21);
Map<String,Object>
jsonMap=new HashMap<String,
Object>();
jsonMap.put("count", 5);
jsonMap.put("success",
"成功!");
jsonMap.put("stu", stu);
JSONObject jsonObject =
JSONObject.fromObject(jsonMap);//转换为JSON数据
System.out.println(jsonObject);//输出
List<Stu>
slist=new ArrayList<Stu>();
slist.add(stu);
slist.add(stu1);
slist.add(stu2);
JSONArray listjson
=JSONArray.fromObject(slist);//把list转换为JSON数据
System.out.println(listjson.toString());
List<Classes>
clist=new ArrayList<Classes>();
clist.add(classes);
clist.add(classes1);
clist.add(classes2);
Set<Stu>
stus=new HashSet<Stu>();
stus.add(stu2);
stus.add(stu);
//classes.setStus(stus);
//classes1.setStus(stus);
JSONArray
clistjson=JSONArray.fromObject(clist);
System.out.println(clistjson);
Result
{"stu":{"age":20,"birDate":null,"classes":{"id":3,"name":"DS980","stus":[]},"id":1,"name":"小白"},"count":5,"success":"成功!"}
[{"age":20,"birDate":null,"classes":{"id":3,"name":"DS980","stus":[]},"id":1,"name":"小白"},{"age":12,"birDate":null,"classes":null,"id":1,"name":"小强"},{"age":21,"birDate":null,"classes":null,"id":1,"name":"小黑"}]
[{"id":3,"name":"DS980","stus":[]},{"id":0,"name":"","stus":[]},{"id":0,"name":"","stus":[]}]
第二种方式:写个一个公用的util类,不需引入jar。当然没有一定的功力是写不出这么NB的代码的,下面也不我写的,从网上找的NR写的代码:
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JsonUtil {
public static String object2json(Object obj)
{
StringBuilder json = new
StringBuilder();
if (obj == null) {
json.append("\"\"");
} else if (obj instanceof
String || obj instanceof Integer
||
obj instanceof Float || obj instanceof Boolean
||
obj instanceof Short || obj instanceof Double
||
obj instanceof Long || obj instanceof BigDecimal
||
obj instanceof BigInteger || obj instanceof Byte) {
json.append("\"").append(string2json(obj.toString())).append("\"");
} else if (obj instanceof
Object[]) {
json.append(array2json((Object[])
obj));
} else if (obj instanceof List)
{
json.append(list2json((List<?>)
obj));
} else if (obj instanceof Map)
{
json.append(map2json((Map<?,
?>) obj));
} else if (obj instanceof Set)
{
json.append(set2json((Set<?>)
obj));
} else {
json.append(bean2json(obj));
}
return json.toString();
}
public static String bean2json(Object bean)
{
StringBuilder json = new
StringBuilder();
json.append("{");
PropertyDescriptor[] props =
null;
try {
props =
Introspector.getBeanInfo(bean.getClass(), Object.class)
.getPropertyDescriptors();
} catch (IntrospectionException
e) {
}
if (props != null) {
for (int i =
0; i < props.length; i++) {
try
{
String
name = object2json(props[i].getName());
String
value = object2json(props[i].getReadMethod().invoke(
bean));
json.append(name);
json.append(":");
json.append(value);
json.append(",");
}
catch (Exception e) {
}
}
json.setCharAt(json.length()
- 1, '}');
} else {
json.append("}");
}
return json.toString();
}
public static String
list2json(List<?> list) {
StringBuilder json = new
StringBuilder();
json.append("[");
if (list != null
&& list.size() > 0)
{
for (Object
obj : list) {
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length()
- 1, ']');
} else {
json.append("]");
}
return json.toString();
}
public static String array2json(Object[]
array) {
StringBuilder json = new
StringBuilder();
json.append("[");
if (array != null
&& array.length > 0)
{
for (Object
obj : array) {
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length()
- 1, ']');
} else {
json.append("]");
}
return json.toString();
}
public static String
map2json(Map<?, ?> map) {
StringBuilder json = new
StringBuilder();
json.append("{");
if (map != null
&& map.size() > 0)
{
for (Object
key : map.keySet()) {
json.append(object2json(key));
json.append(":");
json.append(object2json(map.get(key)));
json.append(",");
}
json.setCharAt(json.length()
- 1, '}');
} else {
json.append("}");
}
return json.toString();
}
public static String
set2json(Set<?> set) {
StringBuilder json = new
StringBuilder();
json.append("[");
if (set != null
&& set.size() > 0)
{
for (Object
obj : set) {
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length()
- 1, ']');
} else {
json.append("]");
}
return json.toString();
}
public static String string2json(String s)
{
if (s == null)
return
"";
StringBuilder sb = new
StringBuilder();
for (int i = 0; i
< s.length(); i++) {
char ch =
s.charAt(i);
switch (ch)
{
case
'"':
sb.append("\\\"");
break;
case
'\\':
sb.append("\\\\");
break;
case
'\b':
sb.append("\\b");
break;
case
'\f':
sb.append("\\f");
break;
case
'\n':
sb.append("\\n");
break;
case
'\r':
sb.append("\\r");
break;
case
'\t':
sb.append("\\t");
break;
case
'/':
sb.append("\\/");
break;
default:
if
(ch >= '\u0000' &&
ch <= '\u001F') {
String
ss = Integer.toHexString(ch);
sb.append("\\u");
for
(int k = 0; k < 4 - ss.length(); k++) {
sb.append('0');
}
sb.append(ss.toUpperCase());
}
else {
sb.append(ch);
}
}
}
return sb.toString();
}
}
测试代码:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class TestJson {
public static void main(String[] args) {
Classes classes=new
Classes();
classes.setId(1);
classes.setName("TS980");
Classes classes1=new
Classes();
classes.setId(2);
classes.setName("SS980");
Classes classes2=new
Classes();
classes.setId(3);
classes.setName("DS980");
Stu stu=new Stu();
stu.setId(1);
stu.setName("小白");
stu.setAge(20);
stu.setClasses(classes);
Stu stu1=new Stu();
stu1.setId(1);
stu1.setName("小强");
stu1.setAge(12);
Stu stu2=new Stu();
stu2.setId(1);
stu2.setName("小黑");
stu2.setAge(21);
Map<String,Object>
jsonMap=new HashMap<String,
Object>();
jsonMap.put("count", 5);
jsonMap.put("success",
"成功!");
jsonMap.put("stu", stu);
List<Stu>
slist=new ArrayList<Stu>();
slist.add(stu);
slist.add(stu1);
slist.add(stu2); List<Classes>
clist=new ArrayList<Classes>();
clist.add(classes);
clist.add(classes1);
clist.add(classes2);
Set<Stu>
stus=new HashSet<Stu>();
stus.add(stu2);
stus.add(stu);
//classes.setStus(stus);
//classes1.setStus(stus);
System.out.println("=================JSON公用类=====================");
String
jsonObjec2t=JsonUtil.object2json(12);
System.out.println(jsonObjec2t);
String
jsonBean=JsonUtil.bean2json(stu2);
System.out.println(jsonBean);
String
josnMap=JsonUtil.map2json(jsonMap);
System.out.println(josnMap);
String
jsonlist=JsonUtil.list2json(clist);
System.out.println(jsonlist);
String
jsonSet=JsonUtil.set2json(stus);
System.out.println(jsonSet);
//classes.setStus(stus);
//classes1.setStus(stus);
String
info=JsonUtil.object2json(clist);
System.out.println(info);
}
}
效果如下:
=================JSON公用类=====================
"12"
{"age":"21","birDate":"","classes":"","id":"1","name":"小黑"}
{"stu":{"age":"20","birDate":"","classes":{"id":"3","name":"DS980","stus":""},"id":"1","name":"小白"},"count":"5","success":"成功!"}
[{"id":"3","name":"DS980","stus":""},{"id":"0","name":"","stus":""},{"id":"0","name":"","stus":""}]
[{"age":"20","birDate":"","classes":{"id":"3","name":"DS980","stus":""},"id":"1","name":"小白"},{"age":"21","birDate":"","classes":"","id":"1","name":"小黑"}]
[{"id":"3","name":"DS980","stus":""},{"id":"0","name":"","stus":""},{"id":"0","name":"","stus":""}]
发现一个问题是:list集合中有set集合时无法进行解析,需把set转换为list后变成list中的一个属性才能循环。是一问题.......
希望高手指教!
抟摇直上 2012 08 22
加载中,请稍候......