- 浏览: 527856 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
landerson:
明显就有要求的嘛
ANDROID轻量级JSON序列化和反序列化[转] -
jimode2013:
很不错,就是需要这个方法
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转] -
w11h22j33:
...
[转]NSMutableArray中的自动释放对象让我郁闷了一整天 -
w11h22j33:
UILabel* label = [[UILabel a ...
Iphone开发 -
w11h22j33:
http://mobile.51cto.com/iphone- ...
获得通讯录中联系人的所有属性[转]
ANDROID JSON解析工具类,不需要第三方包,支持集合,直接贴代码。
[java] view plaincopy
- import java.lang.reflect.Array;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.lang.reflect.ParameterizedType;
- import java.lang.reflect.Type;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Locale;
- import java.util.Map;
- import java.util.Set;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import org.json.JSONStringer;
- import android.util.Log;
- /**
- * @author keane
- * @version 1.0
- *
- */
- public class JSONHelper {
- private static String TAG = "JSONHelper";
- /**
- * 将对象转换成Json字符串
- * @param obj
- * @return
- */
- public static String toJSON(Object obj) {
- JSONStringer js = new JSONStringer();
- serialize(js, obj);
- return js.toString();
- }
- /**
- * 序列化为JSON
- * @param js
- * @param o
- */
- private static void serialize(JSONStringer js, Object o) {
- if (isNull(o)) {
- try {
- js.value(null);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- return;
- }
- Class<?> clazz = o.getClass();
- if (isObject(clazz)) { // 对象
- serializeObject(js, o);
- } else if (isArray(clazz)) { // 数组
- serializeArray(js, o);
- } else if (isCollection(clazz)) { // 集合
- Collection<?> collection = (Collection<?>) o;
- serializeCollect(js, collection);
- } else { // 单个值
- try {
- js.value(o);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * 序列化数组
- * @param js
- * @param array
- */
- private static void serializeArray(JSONStringer js, Object array) {
- try {
- js.array();
- for (int i = 0; i < Array.getLength(array); ++i) {
- Object o = Array.get(array, i);
- serialize(js, o);
- }
- js.endArray();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 序列化集合
- * @param js
- * @param collection
- */
- private static void serializeCollect(JSONStringer js, Collection<?> collection) {
- try {
- js.array();
- for (Object o : collection) {
- serialize(js, o);
- }
- js.endArray();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 序列化对象
- * @param js
- * @param obj
- */
- private static void serializeObject(JSONStringer js, Object obj) {
- try {
- js.object();
- Class<? extends Object> objClazz = obj.getClass();
- Method[] methods = objClazz.getDeclaredMethods();
- Field[] fields = objClazz.getDeclaredFields();
- for (Field field : fields) {
- try {
- String fieldType = field.getType().getSimpleName();
- String fieldGetName = parseMethodName(field.getName(),"get");
- if (!haveMethod(methods, fieldGetName)) {
- continue;
- }
- Method fieldGetMet = objClazz.getMethod(fieldGetName, new Class[] {});
- Object fieldVal = fieldGetMet.invoke(obj, new Object[] {});
- String result = null;
- if ("Date".equals(fieldType)) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
- Locale.US);
- result = sdf.format((Date)fieldVal);
- } else {
- if (null != fieldVal) {
- result = String.valueOf(fieldVal);
- }
- }
- js.key(field.getName());
- serialize(js, result);
- } catch (Exception e) {
- continue;
- }
- }
- js.endObject();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 判断是否存在某属性的 get方法
- *
- * @param methods
- * @param fieldGetMet
- * @return boolean
- */
- public static boolean haveMethod(Method[] methods, String fieldMethod) {
- for (Method met : methods) {
- if (fieldMethod.equals(met.getName())) {
- return true;
- }
- }
- return false;
- }
- /**
- * 拼接某属性的 get或者set方法
- * @param fieldName
- * @param methodType
- * @return
- */
- public static String parseMethodName(String fieldName,String methodType) {
- if (null == fieldName || "".equals(fieldName)) {
- return null;
- }
- return methodType + fieldName.substring(0, 1).toUpperCase()
- + fieldName.substring(1);
- }
- /**
- * set属性的值到Bean
- * @param obj
- * @param valMap
- */
- public static void setFieldValue(Object obj, Map<String, String> valMap) {
- Class<?> cls = obj.getClass();
- // 取出bean里的所有方法
- Method[] methods = cls.getDeclaredMethods();
- Field[] fields = cls.getDeclaredFields();
- for (Field field : fields) {
- try {
- String setMetodName = parseMethodName(field.getName(),"set");
- if (!haveMethod(methods, setMetodName)) {
- continue;
- }
- Method fieldMethod = cls.getMethod(setMetodName, field
- .getType());
- String value = valMap.get(field.getName());
- if (null != value && !"".equals(value)) {
- String fieldType = field.getType().getSimpleName();
- if ("String".equals(fieldType)) {
- fieldMethod.invoke(obj, value);
- } else if ("Date".equals(fieldType)) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.US);
- Date temp = sdf.parse(value);
- fieldMethod.invoke(obj, temp);
- } else if ("Integer".equals(fieldType)
- || "int".equals(fieldType)) {
- Integer intval = Integer.parseInt(value);
- fieldMethod.invoke(obj, intval);
- } else if ("Long".equalsIgnoreCase(fieldType)) {
- Long temp = Long.parseLong(value);
- fieldMethod.invoke(obj, temp);
- } else if ("Double".equalsIgnoreCase(fieldType)) {
- Double temp = Double.parseDouble(value);
- fieldMethod.invoke(obj, temp);
- } else if ("Boolean".equalsIgnoreCase(fieldType)) {
- Boolean temp = Boolean.parseBoolean(value);
- fieldMethod.invoke(obj, temp);
- } else {
- System.out.println("setFieldValue not supper type:" + fieldType);
- }
- }
- } catch (Exception e) {
- continue;
- }
- }
- }
- /**
- * 对象转Map
- * @param obj
- * @return
- */
- public static Map<String, String> getFieldValueMap(Object obj) {
- Class<?> cls = obj.getClass();
- Map<String, String> valueMap = new HashMap<String, String>();
- // 取出bean里的所有方法
- Method[] methods = cls.getDeclaredMethods();
- Field[] fields = cls.getDeclaredFields();
- for (Field field : fields) {
- try {
- String fieldType = field.getType().getSimpleName();
- String fieldGetName = parseMethodName(field.getName(),"get");
- if (!haveMethod(methods, fieldGetName)) {
- continue;
- }
- Method fieldGetMet = cls.getMethod(fieldGetName, new Class[] {});
- Object fieldVal = fieldGetMet.invoke(obj, new Object[] {});
- String result = null;
- if ("Date".equals(fieldType)) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.CHINA);
- result = sdf.format((Date)fieldVal);
- } else {
- if (null != fieldVal) {
- result = String.valueOf(fieldVal);
- }
- }
- valueMap.put(field.getName(), result);
- } catch (Exception e) {
- continue;
- }
- }
- return valueMap;
- }
- /**
- * 给对象的字段赋值
- * @param obj
- * @param fieldSetMethod
- * @param fieldType
- * @param value
- */
- public static void setFiedlValue(Object obj,Method fieldSetMethod,String fieldType,Object value){
- try {
- if (null != value && !"".equals(value)) {
- if ("String".equals(fieldType)) {
- fieldSetMethod.invoke(obj, value.toString());
- } else if ("Date".equals(fieldType)) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.CHINA);
- Date temp = sdf.parse(value.toString());
- fieldSetMethod.invoke(obj, temp);
- } else if ("Integer".equals(fieldType)
- || "int".equals(fieldType)) {
- Integer intval = Integer.parseInt(value.toString());
- fieldSetMethod.invoke(obj, intval);
- } else if ("Long".equalsIgnoreCase(fieldType)) {
- Long temp = Long.parseLong(value.toString());
- fieldSetMethod.invoke(obj, temp);
- } else if ("Double".equalsIgnoreCase(fieldType)) {
- Double temp = Double.parseDouble(value.toString());
- fieldSetMethod.invoke(obj, temp);
- } else if ("Boolean".equalsIgnoreCase(fieldType)) {
- Boolean temp = Boolean.parseBoolean(value.toString());
- fieldSetMethod.invoke(obj, temp);
- } else {
- fieldSetMethod.invoke(obj, value);
- Log.e(TAG, TAG + ">>>>setFiedlValue -> not supper type" + fieldType);
- }
- }
- } catch (Exception e) {
- Log.e(TAG, TAG + ">>>>>>>>>>set value error.",e);
- }
- }
- /**
- * 反序列化简单对象
- * @param jo
- * @param clazz
- * @return
- * @throws JSONException
- */
- public static <T> T parseObject(JSONObject jo, Class<T> clazz) throws JSONException {
- if (clazz == null || isNull(jo)) {
- return null;
- }
- T obj = newInstance(clazz);
- if (obj == null) {
- return null;
- }
- if(isMap(clazz)){
- setField(obj,jo);
- }else{
- // 取出bean里的所有方法
- Method[] methods = clazz.getDeclaredMethods();
- Field[] fields = clazz.getDeclaredFields();
- for (Field f : fields) {
- String setMetodName = parseMethodName(f.getName(),"set");
- if (!haveMethod(methods, setMetodName)) {
- continue;
- }
- try {
- Method fieldMethod = clazz.getMethod(setMetodName, f.getType());
- setField(obj,fieldMethod,f, jo);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- return obj;
- }
- /**
- * 反序列化简单对象
- * @param jsonString
- * @param clazz
- * @return
- * @throws JSONException
- */
- public static <T> T parseObject(String jsonString, Class<T> clazz) throws JSONException {
- if (clazz == null || jsonString == null || jsonString.length() == 0) {
- return null;
- }
- JSONObject jo = null;
- jo = new JSONObject(jsonString);
- if (isNull(jo)) {
- return null;
- }
- return parseObject(jo, clazz);
- }
- /**
- * 反序列化数组对象
- * @param ja
- * @param clazz
- * @return
- */
- public static <T> T[] parseArray(JSONArray ja, Class<T> clazz) {
- if (clazz == null || isNull(ja)) {
- return null;
- }
- int len = ja.length();
- @SuppressWarnings("unchecked")
- T[] array = (T[]) Array.newInstance(clazz, len);
- for (int i = 0; i < len; ++i) {
- try {
- JSONObject jo = ja.getJSONObject(i);
- T o = parseObject(jo, clazz);
- array[i] = o;
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- return array;
- }
- /**
- * 反序列化数组对象
- * @param jsonString
- * @param clazz
- * @return
- */
- public static <T> T[] parseArray(String jsonString, Class<T> clazz) {
- if (clazz == null || jsonString == null || jsonString.length() == 0) {
- return null;
- }
- JSONArray jo = null;
- try {
- jo = new JSONArray(jsonString);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- if (isNull(jo)) {
- return null;
- }
- return parseArray(jo, clazz);
- }
- /**
- * 反序列化泛型集合
- * @param ja
- * @param collectionClazz
- * @param genericType
- * @return
- * @throws JSONException
- */
- @SuppressWarnings("unchecked")
- public static <T> Collection<T> parseCollection(JSONArray ja, Class<?> collectionClazz,
- Class<T> genericType) throws JSONException {
- if (collectionClazz == null || genericType == null || isNull(ja)) {
- return null;
- }
- Collection<T> collection = (Collection<T>) newInstance(collectionClazz);
- for (int i = 0; i < ja.length(); ++i) {
- try {
- JSONObject jo = ja.getJSONObject(i);
- T o = parseObject(jo, genericType);
- collection.add(o);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- return collection;
- }
- /**
- * 反序列化泛型集合
- * @param jsonString
- * @param collectionClazz
- * @param genericType
- * @return
- * @throws JSONException
- */
- public static <T> Collection<T> parseCollection(String jsonString, Class<?> collectionClazz,
- Class<T> genericType) throws JSONException {
- if (collectionClazz == null || genericType == null || jsonString == null
- || jsonString.length() == 0) {
- return null;
- }
- JSONArray jo = null;
- try {
- jo = new JSONArray(jsonString);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- if (isNull(jo)) {
- return null;
- }
- return parseCollection(jo, collectionClazz, genericType);
- }
- /**
- * 根据类型创建对象
- * @param clazz
- * @return
- * @throws JSONException
- */
- private static <T> T newInstance(Class<T> clazz) throws JSONException {
- if (clazz == null)
- return null;
- T obj = null;
- if (clazz.isInterface()) {
- if (clazz.equals(Map.class)) {
- obj = (T) new HashMap();
- }else if (clazz.equals(List.class)) {
- obj = (T) new ArrayList();
- }else if (clazz.equals(Set.class)) {
- obj = (T) new HashSet();
- }else{
- throw new JSONException("unknown interface: " + clazz);
- }
- }else{
- try {
- obj = clazz.newInstance();
- }catch (Exception e) {
- throw new JSONException("unknown class type: " + clazz);
- }
- }
- return obj;
- }
- /**
- * 设定Map的值
- * @param obj
- * @param jo
- */
- private static void setField(Object obj, JSONObject jo) {
- try {
- @SuppressWarnings("unchecked")
- Iterator<String> keyIter = jo.keys();
- String key;
- Object value;
- @SuppressWarnings("unchecked")
- Map<String, Object> valueMap = (Map<String, Object>) obj;
- while (keyIter.hasNext()) {
- key = (String) keyIter.next();
- value = jo.get(key);
- valueMap.put(key, value);
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- /**
- * 设定字段的值
- * @param obj
- * @param fieldSetMethod
- * @param f
- * @param jo
- */
- private static void setField(Object obj, Method fieldSetMethod,Field f, JSONObject jo) {
- String name = f.getName();
- Class<?> clazz = f.getType();
- try {
- if (isArray(clazz)) { // 数组
- Class<?> c = clazz.getComponentType();
- JSONArray ja = jo.optJSONArray(name);
- if (!isNull(ja)) {
- Object array = parseArray(ja, c);
- setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), array);
- }
- } else if (isCollection(clazz)) { // 泛型集合
- // 获取定义的泛型类型
- Class<?> c = null;
- Type gType = f.getGenericType();
- if (gType instanceof ParameterizedType) {
- ParameterizedType ptype = (ParameterizedType) gType;
- Type[] targs = ptype.getActualTypeArguments();
- if (targs != null && targs.length > 0) {
- Type t = targs[0];
- c = (Class<?>) t;
- }
- }
- JSONArray ja = jo.optJSONArray(name);
- if (!isNull(ja)) {
- Object o = parseCollection(ja, clazz, c);
- setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), o);
- }
- } else if (isSingle(clazz)) { // 值类型
- Object o = jo.opt(name);
- if (o != null) {
- setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), o);
- }
- } else if (isObject(clazz)) { // 对象
- JSONObject j = jo.optJSONObject(name);
- if (!isNull(j)) {
- Object o = parseObject(j, clazz);
- setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), o);
- }
- } else if (isList(clazz)) { // 列表
- // JSONObject j = jo.optJSONObject(name);
- // if (!isNull(j)) {
- // Object o = parseObject(j, clazz);
- // f.set(obj, o);
- // }
- } else {
- throw new Exception("unknow type!");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 设定字段的值
- * @param obj
- * @param f
- * @param jo
- */
- private static void setField(Object obj, Field f, JSONObject jo) {
- String name = f.getName();
- Class<?> clazz = f.getType();
- try {
- if (isArray(clazz)) { // 数组
- Class<?> c = clazz.getComponentType();
- JSONArray ja = jo.optJSONArray(name);
- if (!isNull(ja)) {
- Object array = parseArray(ja, c);
- f.set(obj, array);
- }
- } else if (isCollection(clazz)) { // 泛型集合
- // 获取定义的泛型类型
- Class<?> c = null;
- Type gType = f.getGenericType();
- if (gType instanceof ParameterizedType) {
- ParameterizedType ptype = (ParameterizedType) gType;
- Type[] targs = ptype.getActualTypeArguments();
- if (targs != null && targs.length > 0) {
- Type t = targs[0];
- c = (Class<?>) t;
- }
- }
- JSONArray ja = jo.optJSONArray(name);
- if (!isNull(ja)) {
- Object o = parseCollection(ja, clazz, c);
- f.set(obj, o);
- }
- } else if (isSingle(clazz)) { // 值类型
- Object o = jo.opt(name);
- if (o != null) {
- f.set(obj, o);
- }
- } else if (isObject(clazz)) { // 对象
- JSONObject j = jo.optJSONObject(name);
- if (!isNull(j)) {
- Object o = parseObject(j, clazz);
- f.set(obj, o);
- }
- } else if (isList(clazz)) { // 列表
- JSONObject j = jo.optJSONObject(name);
- if (!isNull(j)) {
- Object o = parseObject(j, clazz);
- f.set(obj, o);
- }
- }else {
- throw new Exception("unknow type!");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 判断对象是否为空
- * @param obj
- * @return
- */
- private static boolean isNull(Object obj) {
- if (obj instanceof JSONObject) {
- return JSONObject.NULL.equals(obj);
- }
- return obj == null;
- }
- /**
- * 判断是否是值类型
- * @param clazz
- * @return
- */
- private static boolean isSingle(Class<?> clazz) {
- return isBoolean(clazz) || isNumber(clazz) || isString(clazz);
- }
- /**
- * 是否布尔值
- * @param clazz
- * @return
- */
- public static boolean isBoolean(Class<?> clazz) {
- return (clazz != null)
- && ((Boolean.TYPE.isAssignableFrom(clazz)) || (Boolean.class
- .isAssignableFrom(clazz)));
- }
- /**
- * 是否数值
- * @param clazz
- * @return
- */
- public static boolean isNumber(Class<?> clazz) {
- return (clazz != null)
- && ((Byte.TYPE.isAssignableFrom(clazz)) || (Short.TYPE.isAssignableFrom(clazz))
- || (Integer.TYPE.isAssignableFrom(clazz))
- || (Long.TYPE.isAssignableFrom(clazz))
- || (Float.TYPE.isAssignableFrom(clazz))
- || (Double.TYPE.isAssignableFrom(clazz)) || (Number.class
- .isAssignableFrom(clazz)));
- }
- /**
- * 判断是否是字符串
- * @param clazz
- * @return
- */
- public static boolean isString(Class<?> clazz) {
- return (clazz != null)
- && ((String.class.isAssignableFrom(clazz))
- || (Character.TYPE.isAssignableFrom(clazz)) || (Character.class
- .isAssignableFrom(clazz)));
- }
- /**
- * 判断是否是对象
- * @param clazz
- * @return
- */
- private static boolean isObject(Class<?> clazz) {
- return clazz != null && !isSingle(clazz) && !isArray(clazz) && !isCollection(clazz);
- }
- /**
- * 判断是否是数组
- * @param clazz
- * @return
- */
- public static boolean isArray(Class<?> clazz) {
- return clazz != null && clazz.isArray();
- }
- /**
- * 判断是否是集合
- * @param clazz
- * @return
- */
- public static boolean isCollection(Class<?> clazz) {
- return clazz != null && Collection.class.isAssignableFrom(clazz);
- }
- /**
- * 判断是否是Map
- * @param clazz
- * @return
- */
- public static boolean isMap(Class<?> clazz) {
- return clazz != null && Map.class.isAssignableFrom(clazz);
- }
- /**
- * 判断是否是列表
- * @param clazz
- * @return
- */
- public static boolean isList(Class<?> clazz) {
- return clazz != null && List.class.isAssignableFrom(clazz);
- }
- }
调用测试代码:
[java] view plaincopy
- public class User{
- private String name;
- private String password;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
- void testObj(){
- try {
- User user = new User();
- user.setName("abcd");
- user.setPassword("123456");
- User user1 = new User();
- user.setName("abcdf");
- user.setPassword("1234567");
- String jsonStrUser = JSONHelper.toJSON(user); //序列化
- User jsonUser = JSONHelper.parseObject(jsonStrUser, User.class); //反序列化
- Map mapUser = JSONHelper.parseObject(jsonStrUser, HashMap.class); //反序列化
- List sourceList = new ArrayList<User>();
- sourceList.add(user);
- sourceList.add(user1);
- String jsonStrUserList = JSONHelper.toJSON(sourceList); //序列化
- List listUser = (List) JSONHelper.parseCollection(jsonStrUserList, List.class, User.class); //反序列化
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
发表评论
-
iOS App性能优化
2014-01-03 11:23 1649http://www.hrchen.com/2013/05/ ... -
iOS多线程编程Part 3/3 - GCD
2014-01-03 11:21 1591http://www.hrchen.com/2013/07/ ... -
iOS多线程编程Part 2/3 - NSOperation
2014-01-03 11:20 4490http://www.hrchen.com/2013/06/ ... -
iOS多线程编程Part 1/3 - NSThread & Run Loop
2014-01-03 11:17 7044http://www.hrchen.com/2013/06/ ... -
iOS移动网络环境调优那些事[转]
2014-01-02 17:10 2659http://xiangwangfeng.com/201 ... -
生成APNS Service证书的步骤[转]
2013-05-23 09:19 5638要进行推送服务的第一件事就是获取推送证书。它用来对你通过SS ... -
xcode 环境,多工程联编设置【转】
2013-02-28 21:59 8880http://blog.csdn.net/vienna_zj ... -
干掉你程序中的僵尸代码【转】
2012-12-22 11:05 925随着万圣节越来越流行,我感觉有必要跟大家讨论一下一个 ... -
一个文本框搞定信用卡相关信息的输入[转]
2012-12-22 11:03 1089http://beforweb.com/node/134 ... -
【转】深度技术分析“为什么ios比android流畅”
2012-09-23 19:41 1403原文 Andorid更新了一个版本又一个版本,硬 ... -
Iphone开发
2012-09-17 22:46 11621. NSClassFromString 这个方法 ... -
HowTo: Install iPhone SDK 2.0 – 3.1 for XCode 3.2[转]
2012-09-06 09:00 1178原文链接 So… you’ve installe ... -
Xcode 中设置部分文件ARC支持[转]
2012-08-03 10:57 1702ARC是什么 ARC是iOS 5推出的新功 ... -
xcode4 设置调试错误信息小结【转】
2012-07-19 14:37 1758方案1:NSZombieEnabled 先选中工程, ... -
Finding iPhone Memory Leaks: A “Leaks” Tool Tutorial【转】
2012-07-19 14:36 1237Finding iPhone Memory Lea ... -
[Cocoa]XCode的一些调试技巧【转】
2012-07-19 14:35 1170XCode 内置GDB,我们可以在命令行中使用 GDB ... -
[IPhone]如何使用Leak检查内存泄漏[转]
2012-07-19 14:34 1187简介 在IPhone程式开发中,记忆体泄漏(内存泄漏)是 ... -
获得通讯录中联系人的所有属性[转]
2012-06-21 14:04 1564获得通讯录中联系人的所有属性 ,看代码: ABAdd ... -
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转]
2012-06-20 23:51 16372------------------------------- ... -
shouldAutorotateToInterfaceOrientation 不触发或者不执行的问题[转]
2012-06-20 22:58 1412今天遇到一个很郁闷 ...
相关推荐
metajson 非侵入性,高性能的C 17轻量级JSON序列化工具,专为易于使用和性能而设计。
.net 将dataset json序列化和反序列化成dataset JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - ...
轻量级JSON解析库 BriefJSON,追求以最少的代码完成JSON解析及JAVA对象的序列化和反序列化。用户只需把代码文件拷贝到自己的项目中即可使用。采用模块化设计,将JSON序列化与JAVA Bean序列化分成2个包,使用户按需...
1. 最近项目已经上线了 ,闲暇了几天 想将JSON的序列化以及反序列化进行重新的封装一下本人定义为JSONHelp,虽然Microsoft 已经做的很好了。但是我想封装一套为自己开发的项目使用。方便后期的扩展以及开发使用。 2....
Jsonite是适用于.NET的轻量级JSON序列化器和反序列化器 var obj = ( JsonObject ) Json . Deserialize ( @" { "" name "" : "" John "" , "" age "" : 26} " ) Jsonite提供以下功能: 实现应符合和 。 如果发现...
一种C 的json序列化框架的设计与实现,刘代雄,,本文描述了一种轻量级的JSON序列化框架。该框架使用C 11引入的enable_if和模板偏特化等C 元编程技术,实现了对象、基本类型、STL容器的
在网站应用中使用JSON的场景越来越多,本文介绍 ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间、集合、字典的处理。 一、JSON简介 ...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于被支持JavaScript的浏览器所解析。提出了一种基于JSON的对象序列化算法,该算法通过分析JSON文法并建立对象导航图,透明地将Java对象序列化成...
Json:Qt5的轻量级JSON解析器和序列化器
JSONCoder 是一个轻量级的通用的 Java 对象序列化和反序列化到 JSON 格式的工具包,类似 Jackson 或者 FastJson。这个库在 eBay 内部广泛使用多年。这并非是要替代其他常用库,主要是解决了一些其他库中不被支持的...
用于.NET的快速轻量级JSON序列化器。 分发为.NET库和C#源代码。 为什么要使用另一个JSON序列化器? 该序列化程序主要设计为嵌入用C#编写的其他.NET库中。 这样可以减少对其他广泛使用的JSON解析库的依赖。 功能与...
JSON是一种轻量级的数据交换格式。这篇文章主要介绍了.NET中JSON的序列化和反序列化的几种方式,非常具有实用价值,需要的朋友可以参考下
JSON数据是一种轻量级的数据交换格式,序列化:将内存数据对象变成字符串。 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu import json info = { name:liu, age:25, sex:girl } f = ...
JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。 JSON是“名值对”的集合。结构由大括号'{}’,中括号'[]’,逗号’,’,冒号’:’,双引号’“”’组成,包含的数据类型有...
反序列化的时候可以指定泛型参数,直接解析成对应的对象,这个功能比很多轻量级的JSON库要强很多了,省去了我们大量的new对象和赋值的步骤。也可以不指定泛型,解析成的对象可以转换成Dictionary,键值是字符串,...
JSON序列化/反序列化库有很多选项,为什么我们需要另一个? 如果您也是JSON的拥护者,但讨厌JSON标准的限制,使其很难用作配置格式,但仍然不想将JSON放弃给YAML(JSON很好,为什么需要另一个非常难看的标记语言)...
什么是JSON? JSON (JavaScript Object Notation) is a lightweight data-interchange ...翻译:Json【javascript对象表示方法】,它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机
JSON 映射器一个简单的轻量级 JSON 映射实用程序。我如何使用它? 通过 Dart Pub 包管理器下载依赖项。 将以下行添加到您的 pubspec.yaml 依赖项中: json_mapper: "any"完成后,使用pub get获取包,然后导入它: ...
如果您使用的是SwiftLocation或我的其他任何创作,请考虑以下选项: 指数如何使用支持的类型安装(CocoaPods,SwiftPM和迦太基) 测验 使用方法:一次性装箱并解包序列化和反序列化都发生在Data对象内部。...
这个是JAVA的序列化技术JSON的一个轻量级实现。使用时直接将这个jar包加入到lib中即可。