json与Bean对象互相转换

    在工作中碰到了一些问题,具体是这样的,在Swing画的界面上有许多的组件,每个组件上各自对应的有很多值,如下图所示;

 

这些组件对应的值设置好之后,在重新打开界面后还需要将原来设置好的值重新置入。

 

由于系统设计的问题,从前台界面传输到后台的时候没办法传对象(接口设计原因),这样这些个作为查询条件的值只能作为字符串传递。。

 

于是想到了用JSON转换Java对象的方法得到解决;可以将界面上每个组件的变量名,可能的操作符与对应的值作为一个查询对象QueryMeta组装:然后讲组装好的对象转换为JSON输出的string类型保存,然后当将保存的值重新置入界面的时候,再进行还原处理。

JSON定义:引自百度百科

JSON(JavaScript Object Notation) 本来是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

 

当然了JSON也可以支持java对象。下面是研究JSON的时候做的一些小例子,放到这里做个备份。主要测试JSON对象跟JSON String格式之间的互相转换。用到的包有:json-lib-2.3-jdk15,commons-logging-1.1.1,ezmorph-1.0.6,commons-collections-3.2.1,commons-beanutils-1.8.1,commons-lang-2.5-sources

package zhaozh.test;

/**
 *
 * @author zhaozh 2010-11-8 下午11:04:43
 *
 */
public class QueryMeta {
 private String operator;
 private String leftKey;
 private Object rightValues;
 
 public static final String OP = "operator";
 public static final String LEFT = "leftkey";
 public static final String RIGHT = "rightValues";

 public String getOperator() {
  return operator;
 }

 public void setOperator(String operator) {
  this.operator = operator;
 }

 public String getLeftKey() {
  return leftKey;
 }

 public void setLeftKey(String leftKey) {
  this.leftKey = leftKey;
 }

 public Object getRightValues() {
  return rightValues;
 }

 public void setRightValues(Object rightValues) {
  this.rightValues = rightValues;
 }

 public String valueof(){
  return leftKey + operator + rightValues;
 }
}

package zhaozh.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;
import net.sf.json.util.PropertySetStrategy;

import org.apache.commons.collections.map.SingletonMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 *
 * @author zhaozh 2010-11-9 下午10:32:11
 *
 */
public class JsonTest {

 private static final Log log = LogFactory.getLog(JsonTest.class);
 private static Map opMap = new HashMap();
 static{
  opMap.put("accbook", "=");
  opMap.put("vouchertype", "=");
  opMap.put("voucherno", "=");
  opMap.put("preparedate", "=");
 }
 
 /**
  * @param args
  * 两种转换的方法:JSONObject.toBean,JSONSerializer.toJava
  */
 public static void main(String[] args) {
  JsonTest jsonTest = new JsonTest();
  JSONArray json = jsonTest.createJSON();
  json = jsonTest.restorJSON(json.toString());
  Iterator it = json.iterator();
  while(it.hasNext()){
   JSONObject jsonObject = (JSONObject) it.next();
   QueryMeta obj = (QueryMeta) JSONObject.toBean(jsonObject,QueryMeta.class);
   log.info(obj.valueof());
  }

  
  Object obj = JSONSerializer.toJava(json,jsonTest.makeConfig());
  if(obj.getClass().isAssignableFrom(ArrayList.class)){
   ArrayList querys = (ArrayList) obj;
   for (QueryMeta queryMeta : querys) {
    log.info(queryMeta.valueof());
   }
  }
 }

 private JSONArray restorJSON(String json) {
  return JSONArray.fromObject(json,makeConfig());
 }

 private JSONArray createJSON() {
  JSONArray json = new JSONArray();
  json.addAll(makeQueryByComponent(makeCompMap()),makeConfig());
  log.info(json);
  return json;
 }

 private JsonConfig makeConfig() {
  JsonConfig config = new JsonConfig();
  config.setCollectionType(List.class);
  config.setRootClass(QueryMeta.class);
//  config.registerJsonBeanProcessor(QueryMeta.class, new QueryMetaProcessor());
  config.setPropertySetStrategy(PropertySetStrategy.DEFAULT);
  return config;
 }

 private Map makeCompMap() {
  Map map = new HashMap();
  List compnames = new ArrayList();
  compnames.add("accbook");
  compnames.add("vouchertype");
  compnames.add("voucherno");
  compnames.add("preparedate");
  for (String name : compnames) {
   SingletonMap map2 = new SingletonMap(opMap.get(name),"a" + name);
   map.put(name, map2);
  }
  return map;
 }

 /**
  *
  * @param compMap {compname:{operator:values}}
  * @return
  */
 private List makeQueryByComponent(
   Map compMap) {
  List metas = new LinkedList();
  Set keys = compMap.keySet();
  for (String key : keys) {
   QueryMeta meta = new QueryMeta();
   meta.setLeftKey(key);
   SingletonMap map = compMap.get(key);
   meta.setOperator(map.getKey().toString());
   meta.setRightValues(map.getValue());
   metas.add(meta);
  }
  return metas;
 }
}

 

 

你可能感兴趣的:(java技术)