- 浏览: 537957 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1693http://www.hrchen.com/2013/05/ ... -
iOS多线程编程Part 3/3 - GCD
2014-01-03 11:21 1648http://www.hrchen.com/2013/07/ ... -
iOS多线程编程Part 2/3 - NSOperation
2014-01-03 11:20 4544http://www.hrchen.com/2013/06/ ... -
iOS多线程编程Part 1/3 - NSThread & Run Loop
2014-01-03 11:17 7105http://www.hrchen.com/2013/06/ ... -
iOS移动网络环境调优那些事[转]
2014-01-02 17:10 2699http://xiangwangfeng.com/201 ... -
生成APNS Service证书的步骤[转]
2013-05-23 09:19 5676要进行推送服务的第一件事就是获取推送证书。它用来对你通过SS ... -
xcode 环境,多工程联编设置【转】
2013-02-28 21:59 8963http://blog.csdn.net/vienna_zj ... -
干掉你程序中的僵尸代码【转】
2012-12-22 11:05 965随着万圣节越来越流行,我感觉有必要跟大家讨论一下一个 ... -
一个文本框搞定信用卡相关信息的输入[转]
2012-12-22 11:03 1139http://beforweb.com/node/134 ... -
【转】深度技术分析“为什么ios比android流畅”
2012-09-23 19:41 1438原文 Andorid更新了一个版本又一个版本,硬 ... -
Iphone开发
2012-09-17 22:46 12061. NSClassFromString 这个方法 ... -
HowTo: Install iPhone SDK 2.0 – 3.1 for XCode 3.2[转]
2012-09-06 09:00 1222原文链接 So… you’ve installe ... -
Xcode 中设置部分文件ARC支持[转]
2012-08-03 10:57 1735ARC是什么 ARC是iOS 5推出的新功 ... -
xcode4 设置调试错误信息小结【转】
2012-07-19 14:37 1810方案1:NSZombieEnabled 先选中工程, ... -
Finding iPhone Memory Leaks: A “Leaks” Tool Tutorial【转】
2012-07-19 14:36 1266Finding iPhone Memory Lea ... -
[Cocoa]XCode的一些调试技巧【转】
2012-07-19 14:35 1205XCode 内置GDB,我们可以在命令行中使用 GDB ... -
[IPhone]如何使用Leak检查内存泄漏[转]
2012-07-19 14:34 1235简介 在IPhone程式开发中,记忆体泄漏(内存泄漏)是 ... -
获得通讯录中联系人的所有属性[转]
2012-06-21 14:04 1615获得通讯录中联系人的所有属性 ,看代码: ABAdd ... -
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转]
2012-06-20 23:51 16422------------------------------- ... -
shouldAutorotateToInterfaceOrientation 不触发或者不执行的问题[转]
2012-06-20 22:58 1462今天遇到一个很郁闷 ...
相关推荐
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。在C++中,处理JSON通常需要借助第三方库,因为C++标准库并不内置对JSON的支持。本篇文章将深入探讨C++中JSON的...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。反序列化是将JSON格式的字符串转换为程序可直接使用的对象的过程,这对于处理网络请求返回的数据至关重要。在...
下面将详细介绍***中JSON序列化和反序列化的几种方法以及如何处理日期时间类型的序列化和反序列化。 首先,了解JSON的基本格式是非常重要的。JSON的数据结构由对象(Object)、数组(Array)、字符串(String)、数字...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它是基于JavaScript的一个子集,但语法简单明了,易于人类阅读和编写,同时也易于机器解析和生成。在编程中,...
在VB.NET编程环境中,XML和JSON序列化与反序列化是常见的数据处理技术,用于将对象转换为文本格式(XML或JSON),以便于存储、传输和解析。这两者都是轻量级的数据交换格式,广泛应用于Web服务和客户端应用程序之间...
本篇将深入探讨Delphi中的JSON序列化和反序列化技术。 一、JSON简介 JSON是一种独立于语言的数据表示格式,它基于ECMAScript的一个子集。一个有效的JSON对象通常包含键值对(key-value pairs)的集合,数组或其他...
总之,JSON序列化和反序列化在Web开发中扮演着核心角色,它们使数据能够在客户端和服务器之间以及本地存储中高效地传递和管理。通过理解并熟练运用这些概念,开发者能够构建出更加灵活和可扩展的应用程序。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但也使用了类似于C家族语言(包括C、C++、C#等)的习惯,这些特性使JSON成为理想的数据交换语言。JSON序列化是将...
总结,Java中的JSON序列化与反序列化是数据交互的重要环节,Jackson和Gson是两个常用的库,它们提供了丰富的功能和良好的API设计,使得处理JSON数据变得简单高效。通过理解和掌握这些知识,开发者可以更好地在Java...
在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于服务器与客户端之间的数据传输,因其简洁明了的结构而备受青睐。本文将深入探讨JSON的序列化与反序列化过程,以及如何使用...
cpp-metajson是一款专为C++17设计的轻量级JSON序列化工具,其核心特性在于非侵入性和高性能。非侵入性意味着该库不会要求你修改原有的数据结构来适应JSON序列化的需求,而是通过元编程技术自动处理数据到JSON的转换...
在.NET开发中,C#语言提供了多种方式来处理JSON序列化和反序列化,这对于数据交换和存储至关重要。本文将详细介绍C#中处理JSON的三种主要方法:使用Json.NET库(Newtonsoft.Json)、使用.NET Framework自带的System....
.NET框架中的序列化和反...总之,理解和掌握.NET中的JSON序列化和反序列化是开发Web服务和客户端应用的关键技能,无论选择使用内置方法还是第三方库如Json.NET,都需要根据项目需求来权衡性能、功能和依赖管理等因素。
Json.NET是.NET开发中广泛使用的第三方库,由James Newton-King 开发,它提供了一套高效且功能丰富的JSON序列化和反序列化的解决方案。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web...
在现代软件开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于 web 应用程序、移动应用程序和微服务架构中。C# 作为一种流行的编程语言,提供了多种方式来实现 JSON 序列化和反序列...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务和应用程序之间的数据传输。它易于人阅读和编写,同时也易于机器解析和生成。在.NET框架中,处理JSON序列化与反序列化的任务通常...
另一种常见的序列化形式是JSON,它是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在C#中,可以使用Newtonsoft.Json库(Json.NET)来实现JSON序列化和反序列化。例如: ```csharp var ...
JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。它最初由Douglas Crockford提出,广泛应用于Web应用程序的数据传输中,因为它易于人阅读和编写,同时也易于机器解析和生成。...
总之,C#中的JSON序列化和反序列化是开发过程中不可或缺的一部分,它使得数据交换变得简单且高效。无论是使用内置的System.Text.Json还是第三方的Json.NET,都能帮助开发者轻松地在对象和JSON字符串之间转换,从而更...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写。JSON序列化是将对象或集合转换为JSON格式的过程。 在上面的代码中,我们使用了`System.Runtime.Serialization.Json....