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

使用JSON-LIB转换JAVA对象

2013-05-31 10:25 573 查看
使用JSON-LIB可以极大的简化JAVA对象转换成JSON对象所需进行的操作,更可以避免人工操作生成JSON对象字符串时带来的麻烦和误操作:

使用JSON-LIB,首先要有几个支持的包:

http://json-lib.sourceforge.net下载json-lib-1.1-jdk15.jar

commons-lang.jar、commons-logging.jar,commons-beanutils.jar
这些包可在tomcat/comon/lib下找到

EZMorph 下载地址http://ezmorph.sourceforge.net

morph-1.0.1 下载地址:http://morph.sourceforge.net

使用例子:

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

public class JSONTest {

public static void main(String[] args) {

JSONTest j = new JSONTest();

j.ObjectList2json();

}

public void ObjectList2json(){

Map map = new HashMap();

List jlist = new ArrayList();

JSONTestBean bean1 = new JSONTestBean("zhangbo","123123");

JSONTestBean bean2 = new JSONTestBean("lisi","65489");

Props props = new Props("127.0.0.1","8008");

jlist.add(bean1);

jlist.add(bean2);

map.put("Props", props);

map.put("jsonObjectList", jlist);

JSONArray jsonArray = JSONArray.fromObject(map);

System.out.println(jsonArray);

}

public void arr2json() {

boolean[] boolArray = new boolean[] { true, false, true };

JSONArray jsonArray = JSONArray.fromObject(boolArray);

System.out.println(jsonArray);

// prints [true,false,true]

}

public void list2json() {

List list = new ArrayList();

list.add("first");

list.add("second");

JSONArray jsonArray = JSONArray.fromObject(list);

System.out.println(jsonArray);

// prints ["first","second"]

}

public void createJson() {

JSONArray jsonArray = JSONArray.fromObject("['json','is','easy']");

System.out.println(jsonArray);

// prints ["json","is","easy"]

}

public void map2json() {

Map map = new HashMap();

map.put("name", "json");

map.put("bool", Boolean.TRUE);

map.put("int", new Integer(1));

map.put("arr", new String[] { "a", "b" });

map.put("func", "function(i){ return this.arr[i]; }");

JSONObject json = JSONObject.fromObject(map);

System.out.println(json);

// prints

// ["name":"json","bool":true,"int":1,"arr":["a","b"],"func":function(i){

// return this.arr[i]; }]

}

public void bean2json() {

JSONObject jsonObject = JSONObject.fromObject(new JSONTestBean("zhangbo","234234"));

System.out.println(jsonObject);

/*

* prints

* {"func1":function(i){ return this.options[i];

* },"pojoId":1,"name":"json","func2":function(i){ return

* this.options[i]; }}

*/

}

public void json2bean() {

String json = "{name=\"json2\",func1:true,pojoId:1,func2:function(a){ return a; },options:['1','2']}";

// JSONObject jb = JSONObject.fromString(json);

// JSONObject.toBean(jb, MyBean.class);

System.out.println();

}

}

其它两个测试实体Bean:

public class JSONTestBean {

private String userName;

private String password;

public JSONTestBean() {

}

public JSONTestBean(String username, String password) {

this.userName = username;

this.password = password;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

}

//===================================================

public class Props {

private String ip;

private String port;

public Props() {

}

public Props(String ip, String port) {

this.ip = ip;

this.port = port;

}

public String getIp() {

return ip;

}

public void setIp(String ip) {

this.ip = ip;

}

public String getPort() {

return port;

}

public void setPort(String port) {

this.port = port;

}

}

使用起来很方便,有了JSON-LIB的支持,可以使开发者轻松构建起基于JSON的AJAX应用程序

附加:关于使用JSON-LIB转换带有DATE类型的对象需要额外的一些设置

JsonConfig cfg=new JsonConfig();

cfg.registerJsonValueProcessor(java.util.Date.class, new JsonValueProcessorImpl());

cfg.registerJsonValueProcessor(java.sql.Date.class, new JsonValueProcessorImpl());

JSONObject obj = JSONObject.fromObject(info,cfg);

JsonValueProcessorImpl为实现了源代码中的接口JsonValueProcessor

import java.text.SimpleDateFormat;

import java.util.Date;

import net.sf.json.JsonConfig;

import net.sf.json.processors.JsonValueProcessor;

public class JsonValueProcessorImpl implements JsonValueProcessor{

private String format="yyyy-MM-dd";

public JsonValueProcessorImpl(){

}

public JsonValueProcessorImpl(String format){

this.format=format;

}

public Object processArrayValue(Object value, JsonConfig jsonConfig) {

String[] obj={};

if(value instanceof Date[]){

SimpleDateFormat sf=new SimpleDateFormat(format);

Date[] dates=(Date[])value;

obj =new String[dates.length];

for (int i = 0; i < dates.length; i++) {

obj[i]=sf.format(dates[i]);

}

}

return obj;

}

public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {

if(value instanceof Date){

String str=new SimpleDateFormat(format).format((Date)value);

return str;

}

return value.toString();

}

public String getFormat() {

return format;

}

public void setFormat(String format) {

this.format = format;

}

}

这也只是实现了将DATE类型转换成yyyy-MM-dd的格式...测试一下吧!~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: