您的位置:首页 > 编程语言 > Java开发

Java对象和json的相互转换

2017-11-01 17:47 357 查看
转载地址:http://www.cnblogs.com/qqzy168/p/3938937.html

平常工作向前台返回数据时需要转化为json格式的数据,就是需要我们将返回的数据按照json的格式组成字符串,然后返回给前台,前台接收后调用JSON对象的JSON.parse()方法去解析字符串生成json对象再使用。说这个的意思主要是说明如果我们手动转换的话不仅费时费力还很容易出错,关于json的一些问题可以参考这篇文章:深入理解JSON

那么有没有现成的方法可以实现转换呢? 有!这里就需要用到json-lib.jar这个jar包,通过使用反编译工具打开,项目结构如下:



可以看到有JSONArray.class、JSONObject.class等类,针对Java类中的对象、集合等结构。

/分割线=====================================/

下面就是转载的内容,其实只要知道了jar包里的内容,就可以针对性的使用不同的类来实现和JSON的互相转换。

package com.my.json;

public class ChildBean {

private String childName;

private String childSex;

private int childAge;

public ChildBean()
{

}
public ChildBean(String childName, String childSex, int childAge) {
this.childName = childName;
this.childSex = childSex;
this.childAge = childAge;
}

public String getChildName() {
return childName;
}

public void setChildName(String childName) {
this.childName = childName;
}

public String getChildSex() {
return childSex;
}

public void setChildSex(String childSex) {
this.childSex = childSex;
}

public int getChildAge() {
return childAge;
}

public void setChildAge(int childAge) {
this.childAge = childAge;
}

@Override
public String toString() {
return "ChildBean [childName=" + childName + ", childSex=" + childSex + ", childAge=" + childAge + "]";
}

}


package com.my.json;

import java.util.ArrayList;
import java.util.List;

public class Person {

private String name;

private List<ChildBean> list = new ArrayList<ChildBean>();

private int num;

private String sex;

private int age;

public Person() {

}

public Person(String name, int num, String sex, int age) {
super();
this.name = name;
this.num = num;
this.sex = sex;
this.age = age;
}

public int getAge() {
return age;
}

public String getName() {
return name;
}

public int getNum() {
return num;
}

public String getSex() {
return sex;
}

public void setAge(int age) {
this.age = age;
}

public void setName(String name) {
this.name = name;
}

public void setNum(int num) {
this.num = num;
}

public void setSex(String sex) {
this.sex = sex;
}

public List<ChildBean> getList() {
return list;
}

public void setList(List<ChildBean> list) {
this.list = list;
}

@Override
public String toString() {
return "Person [name=" + name + ", num=" + num + ", sex=" + sex + ", age=" + age + ",list=" + list + "]";
}

}


package com.my.json;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JS
4000
ONSerializer;
import net.sf.json.JsonConfig;

public class JsonUtil {

/**
* 简单类型:Json转化为bean
*
* @param jsonString
* @param pojoCalss
* @return
*/
public static Object jsonString2Object(String jsonString, Class pojoCalss) {

JSONObject jsonObject = JSONObject.fromObject(jsonString);

Object pojo = JSONObject.toBean(jsonObject, pojoCalss);

return pojo;

}

/**
* 复杂类型:Json转化为bean<br>
* 用法示例:<br>
* Map<String, Class> classMap = new HashMap<String, Class>();
* classMap.put("list", ChildBean.class); //指定复杂类型属性的映射关系,可以使多个放到map中<br>
* Person person=(Person)JsonUtil.jsonString2Object(str2, Person.class,
* classMap);<br>
*
* @param jsonString
* @param pojoCalss
* @return
*/
public static Object jsonString2Object(String jsonString, Class pojoCalss, Map<String, Class> classMap) {
JSONObject jobj = JSONObject.fromObject(jsonString);
return JSONObject.toBean(jobj, pojoCalss, classMap);
}

/**
* 简单|复杂类型:将java对象转换成json字符串<br>
* 支持复杂类型:Java bean 中既有属性又有list
*
* @param javaObj
* @return
*/
public static String object2JsonString(Object javaObj) {

JSONObject json = JSONObject.fromObject(javaObj);

return json.toString();

}

/**
* 从json对象集合表达式中得到一个java对象列表
*
* @param jsonString
* @param pojoClass
* @return
*/
public static List jsonList2JavaList(String jsonString, Class pojoClass) {

JSONArray jsonArray = JSONArray.fromObject(jsonString);

JSONObject jsonObject;

Object pojoValue;

List list = new ArrayList();

for (int i = 0; i < jsonArray.size(); i++) {

jsonObject = jsonArray.getJSONObject(i);

pojoValue = JSONObject.toBean(jsonObject, pojoClass);

list.add(pojoValue);

}

return list;

}

/**
* 从java对象集合表达式中得到一个json列表
*
* @param list
* @return
*/
public static String javaList2JsonList(List list) {

JSONArray jsonArray = JSONArray.fromObject(list);
return jsonArray.toString();
}

/**
* 数组转换为JSON
*
* @param array
* @return
*/
public static String javaArray2Json(Object[] array) {
JSONArray jsonarray = JSONArray.fromObject(array);
return jsonarray.toString();
}

/**
* Json数组转化为Java数组
*
* @param jsonArray
* @param clas
* @return
*/
public static Object jsonArray2JavaArrray(String jsonArray, Class clas) {
JsonConfig jconfig = new JsonConfig();
jconfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY);
jconfig.setRootClass(clas);
JSONArray jarr = JSONArray.fromObject(jsonArray);
return JSONSerializer.toJava(jarr, jconfig);
}

/**
* Map转换成json
* @param map
* @return
*/
public static String javaMap2Json(Map<String, Object> map) {
return JSONObject.fromObject(map).toString();
}

/**
* json转化为map
* @param jsonString
* @param pojoCalss
* @return
*/
public static Object javaMap2Json(String jsonString, Class pojoCalss) {
return jsonString2Object(jsonString, pojoCalss);//调用方法jsonString2Object
}

}


package com.my.json;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
@SuppressWarnings("unchecked")
public static void main(String[] args) {

// 普通bean转化Json
System.out.println("普通bean转化Json:");
ChildBean p = new ChildBean("wwwww", "boy", 23);
String str = JsonUtil.object2JsonString(p);
System.out.println(str);

// 普通Json转化bean,如 {"childAge":23,"childName":"wwwww","childSex":"boy"}
System.out.println("普通Json转化bean:");
ChildBean c = (ChildBean) JsonUtil.jsonString2Object(str, ChildBean.class);
System.out.println(c);

// Java List转化为Json
System.out.println("Java List转化为Json:");
List<ChildBean> list = new ArrayList<ChildBean>();
for (int i = 0; i < 5; i++) {
ChildBean childBean = new ChildBean("wwwww" + i, "boy", i);
list.add(childBean);
}
String jsonList = JsonUtil.javaList2JsonList(list);
System.out.println(jsonList);

// json 列表转化为Java List
System.out.println("json 列表转化为Java List:");
List<ChildBean> l = (List<ChildBean>) JsonUtil.jsonList2JavaList(jsonList, ChildBean.class);
System.out.println(l);

// 复杂bean转化为Json
System.out.println("复杂bean转化为Json:");
List<ChildBean> list2 = new ArrayList<ChildBean>();
for (int i = 0; i < 10; i++) {
ChildBean childBean = new ChildBean("aaaaaa" + i, "boy", i);
list2.add(childBean);
}
Person me = new Person("zhang", 1, "man", 1);
me.setList(list2);

String str2 = JsonUtil.object2JsonString(me);
System.out.println("str2=" + str2);

// 复杂Json转化bean
System.out.println("复杂Json转化bean:");
Map<String, Class> classMap = new HashMap<String, Class>();
classMap.put("list", ChildBean.class); // 指定复杂类型属性的映射关系,可以使多个放到map中
Person person = (Person) JsonUtil.jsonString2Object(str2, Person.class, classMap);
System.out.println(person);
System.out.println(person.getList().get(0).getChildName());

// Java数组转换为JSON
System.out.println("java数组转换为JSON:");
// String[] array = {"asd","dfgd","asd","234"};
ChildBean[] array = new ChildBean[10];
for (int i = 0; i < 10; i++) {
ChildBean childBean = new ChildBean("aaaaaa" + i, "boy", i);
array[i] = childBean;
}
String jsonArray = JsonUtil.javaArray2Json(array);
System.out.println(jsonArray);

// Json数组转化为Java数组
System.out.println("Json数组转化为Java数组:");
ChildBean[] cb = (ChildBean[]) JsonUtil.jsonArray2JavaArrray(jsonArray, ChildBean.class);
System.out.println(Arrays.toString(cb));

//Map转换成json
System.out.println("Map转换成json:");
Map<String, Object> map = new HashMap<String, Object>();
map.put("userId", 1000);
map.put("userName", "张三");
map.put("userSex", "男");
String jsonStr = JsonUtil.javaMap2Json(map);
System.out.println(jsonStr);

//json转化为map
System.out.printl
ab4c
n("json转化为map:");
Map<String, Object> jmap = (Map<String, Object>)JsonUtil.javaMap2Json(jsonStr, Map.class);
System.out.println(jmap);
}
}


转载结束。

/分割线=====================================/

我在用JSONObject转换
map<String,POJO>
时,关于日期的数据转换结果如下:



可以看到,它不是直接传给我一个时间字符串,而是一个Date对象(JavaScript的对象),关于这个问题,先保留,晚上再说。

差点忘记说,json-lib这个jar包需要一些依赖包,具体如下



具体就是这些,如果写的有问题可以留言,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java json