json与Bean对象互相转换
来源:互联网 发布:java 线程池api 编辑:程序博客网 时间:2024/05/16 08:31
在工作中碰到了一些问题,具体是这样的,在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<String, String> opMap = new HashMap<String, String>();
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<QueryMeta> querys = (ArrayList<QueryMeta>) 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<String, SingletonMap> makeCompMap() {
Map<String, SingletonMap> map = new HashMap<String, SingletonMap>();
List<String> compnames = new ArrayList<String>();
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<QueryMeta> makeQueryByComponent(
Map<String, SingletonMap> compMap) {
List<QueryMeta> metas = new LinkedList<QueryMeta>();
Set<String> 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;
}
}
- json与Bean对象互相转换
- json 、map、bean互相转换
- json字符串与java对象互相转换
- C# 对象与JSON串互相转换
- Json字符串与Java对象互相转换
- C# 对象与JSON串互相转换
- C# 对象与JSON串互相转换
- JSON与Java对象互相转换
- json字符串与 js对象互相转换
- Json和Bean的互相转换
- json、对象、字符串互相转换
- JSON对象互相转换操作
- jsontools实现java对象与json值之间互相转换
- Html5中JSON对象与String的互相转换
- jsontools实现java对象与json值之间互相转换
- JSON 字符串 与 java 对象之间互相转换
- 基于jackson的json与对象互相转换
- JSON 字符串 与 java 对象之间互相转换
- unix域套接口示例程序
- dynamic checkbox icon
- window xp 安装 IIS
- asp.net 多线程
- Blackberry textField align to right
- json与Bean对象互相转换
- Android无法访问本地服务器(localhost)的解决方案
- 中州黑客2010
- JQuery上传插件Uploadify使用详解
- 恋人的保质期
- String/StringBuffer/StringBuilder
- SNS算法比赛--搞错时间了,没交上就贴出来玩玩,希望大家指教
- YUV RGB 转换
- 在iPhone游戏中Ogre的UI选择和Ogre的内置UI学习