package com.hdxinfo.util;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.hdxinfo.bean.IndexBean;
public class jsonUtils {
public static String stringToJson(String str){
if(str==null){
return nullToJson();
}
StringBuilder sb = new StringBuilder();
for(int i=0;i < str.length();i++){
char ch = str.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;
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();
}
public static String nullToJson(){
return "";
}
/**
* object对象转化json
*/
public static String objectToJson(Object obj){
StringBuilder json = new StringBuilder();
if(null==obj){
json.append("//");
}else if(obj instanceof Number){
json.append(numberToJson((Number)obj));
}else if(obj instanceof Boolean){
json.append(booleanToJson((Boolean)obj));
}else if(obj instanceof String){
json.append("/").append(stringToJson((String)obj)).append("/");
}else if(obj instanceof Object[]){
json.append(arrayToJson((Object[])obj));
}else if(obj instanceof List){
json.append(listToJson((List<?>)obj));
}else if(obj instanceof Map){
json.append(mapToJson((Map<?,?>)obj));
}else if(obj instanceof Set){
json.append(setToJson((Set<?>)obj));
}else {
json.append(beanToJson(obj));
}
return json.toString();
}
public static String numberToJson(Number number){
return number.toString();
}
public static String booleanToJson(Boolean bool){
return bool.toString();
}
public static String beanToJson(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 = objectToJson(props[i].getName());
String value = objectToJson(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 listToJson(List<?> list){
StringBuilder json = new StringBuilder();
json.append("[");
if(list !=null && list.size() > 0){
for(Object obj:list){
json.append(objectToJson(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
}else{
json.append("]");
}
return json.toString();
}
public static String arrayToJson(Object[] array){
StringBuilder json = new StringBuilder();
json.append("[");
if(array!=null && array.length > 0){
for(Object obj:array){
json.append(objectToJson(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
}else{
json.append("]");
}
return json.toString();
}
public static String mapToJson(Map<?,?> map){
StringBuilder json = new StringBuilder();
json.append("{");
if(map!=null && map.size() > 0){
for(Object key:map.keySet()){
json.append(objectToJson(key));
json.append(":");
json.append(objectToJson(map.get(key)));
json.append(",");
}
json.setCharAt(json.length() - 1,'}');
}else{
json.append("}");
}
return json.toString();
}
public static String setToJson(Set<?> set){
StringBuilder json = new StringBuilder();
json.append("[");
if(set!=null && set.size() >0){
for(Object obj:set){
json.append(objectToJson(obj));
json.append(":");
}
json.setCharAt(json.length() - 1, ']');
}else{
json.append("]");
}
return json.toString();
}
//main测试方法
public static void main(String[] args){
List<IndexBean> le = new ArrayList<IndexBean>();
for(int i = 0; i <5 ;i++){
IndexBean ib = new IndexBean();
ib.setCounts("33 "+i);
ib.setLaunchdate("2011-01-10");
ib.setOwncity("北京");
ib.setSourcesfrom("北京招标网");
ib.setSourcesurl("www.baidu.com");
le.add(ib);
}
// String newstr = jsonUtils.beanToJson(ib);
String newstr = jsonUtils.listToJson(le);
System.out.println(newstr.replace("/", ""));
}
}