//包名
package JSON;
//引用包
/* 注意:
* 引用java
*/
import java.lang.reflect.Array;
//引用包
/* 注意:
* 类提供了动态创建和访问数组元素的各种静态方法
*/
import java.util.ArrayList;
//引用包
/* 注意:
* 提供公共的执行操作方法的接口
*/
import java.util.Collection;
//引用包
/* 注意:
* 提供公共的执行操作方法的基于哈希表的 Map 接口的实现
*/
import java.util.HashMap;
//引用包
/* 注意:
* 提供公共的执行操作方法的对 collection 进行迭代的迭代器
*/
import java.util.Iterator;
//引用包
/* 注意:
* 提供公共的执行操作方法的列表
*/
import java.util.List;
//引用包
/* 注意:
* 提供公共的执行操作方法的映射到值的对象
*/
import java.util.Map;
//引用包
/* 注意:
* 提供公共的执行操作方法的接口
*/
import java.util.Map.Entry;
//公共的类名
/**
* JsDataTools 类
* @author xinjie
*
*/
/*
* JS数据交换格式
* @version v0.1
* @author longHP
*/
public class JsDataTools {
//定义方法
/**
* getJsData() 方法
* @param Object obj
* @return createJsData(obj)
*/
/*
* 获取js数据
* @param 元数据map
* @return js数据
*/
public synchronized static String getJsData(Object obj) {
//返回值
return createJsData(obj);
}
//自动生成
@SuppressWarnings("unchecked")
//定义方法
/**
* createJsData()方法
* @param Object obj
* @return"\"\""
*/
/* 注意:
* 生成js数据
* @param 元数据map
* @return js数据
*/
public static String createJsData(Object obj) {
//if语句
/* 注意:
* 如果null等于odj
*/
if (null == obj) {
//返回值
return "\"\"";
}
//创建实例化对象
/* 注意:
* StringBuffer
* 线程安全的可变字符序列
*/
StringBuffer resultStr = new StringBuffer();
//if语句
/* 注意:
* 如果obj
* instanceof
* 作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据
* Collection
* 集合List、Set等类型
*/
if (obj instanceof Collection) {
//调用方法
resultStr.append("[");
//把接口类型的obj赋值给接口卡类型collection
Collection collection = (Collection) obj;
//if语句
/* 注意:
* 接口类型的collection的存储空间>0
*/
if (collection.size() > 0) {
//获得返回包含此 collection 中所有元素的数组给元素的表示数组形式的collectionObj
Object[] collectionObj = collection.toArray();
//if语句
/* 注意:
* 字符型i = 0 i < collectionObj的数组长度 i+1
*/
for (int i = 0; i < collectionObj.length; i++) {
//将createJsData方法参数追加到序列resultSrr
resultStr.append(createJsData(collectionObj[i]) + ",");
}
//resultStr移除此序列指定位置的 char参数
resultStr.deleteCharAt(resultStr.lastIndexOf(","));
}
//调用方法
resultStr.append("]");
//if语句
/* 注意:
* 否则如果 Obj
* 作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据
* Map类型
*/
} else if (obj instanceof Map) {
//调用方法
resultStr.append("{");
//将Map里面所有映射的 obj给Map类型的map
Map map = (Map) obj;
//if语句
/* 注意:
* map储存空间 > 0
*/
if (map.size() > 0) {
//将map对象迭代的迭代器给iter
/* 注意:
* Iterator
* 迭代器泛型里面是
* Entry
* 接口
*/
Iterator<Entry> iter = map.entrySet().iterator();
//whlie循环语句
/* 注意;
* while
* 循环条件
* iter
* hasNext()
* 是否还有下一个
*/
while (iter.hasNext()) {
//
Map.Entry entry = iter.next();
String key = entry.getKey().toString();
resultStr.append("\"" + key + "\":"); // jquery1.4以上要求双引号包裹
Object tempObj = entry.getValue();
resultStr.append(createJsData(tempObj) + ",");
}
resultStr.deleteCharAt(resultStr.lastIndexOf(","));
}
resultStr.append("}");
} else { // 基本类型
try {
int arrLength = Array.getLength(obj);
resultStr.append("[");
if (arrLength > 0) {
for (int i = 0; i < arrLength; i++) {
resultStr.append(createJsData(Array.get(obj, i)) + ",");
}
resultStr.deleteCharAt(resultStr.lastIndexOf(","));
}
resultStr.append("]");
} catch (IllegalArgumentException e) { // 不是数组,是最基本的数据
resultStr.append("\"" + stringToJson(obj + "") + "\"");
}
}
return resultStr.toString();
}
/**
* 处理特殊字符
* @param json字符串
* @return 处理过的字符串
*/
public static String stringToJson(String str) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case '\"':
sb.append("\\\"");
break;
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:
sb.append(c);
}
}
return sb.toString();
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("a", "1");
map.put("b", "2");
int[] intArr = {1,2,3};
map.put("intArr", intArr);
Map childMap = new HashMap();
childMap.put(3, 5);
childMap.put(7, new HashMap());
childMap.put(new Object(), intArr);
map.put("map", childMap);
List childList = new ArrayList();
childList.add(true);
childList.add(new ArrayList());
childList.add(intArr);
map.put("list1", childList);
System.out.println(JsDataTools.getJsData(map));
}
}
if如果 else否 for循环 Boolean是否
14好的学习
猜你喜欢
转载自xjwolaile.iteye.com/blog/1632140
今日推荐
周排行