Object 轉 Json 針對父類和陣列

2021-07-05 10:16:47 字數 1997 閱讀 2035

該文章是針對那些不想用第三方框架,卻想做到oc轉json的朋友的文章。

關於普通的oc轉json的資料已經非常多了,可是對於其中的轉換還是存在一些缺陷,關於其中的缺陷也會在接下來的文章中提到。不過首先我們先看看網路上經常看到的實現方法和實現,並且針對其中的缺陷進行逐一的填補。

剛開始做專案的時候暫時還不想用第三方框架,於是就去搜尋了如何oc轉json的資料,剛開始哪來用的時候主要是通過以下這些方法來實現

首先第乙個方法是下面這個方法。該方法是用於遍歷物件中的屬性,將其轉換為nsdictionary

+ (nsdictionary*)getobjectdata:(id)obj 

else

[dic setobject:value forkey:propname];

}return dic;

}

其次是下面這個方法,顯而易見,該方法是講每個屬性的value裝換成後,並以key:value的形式儲存到nsdictionary中。

+(id)getobjectinternal:(id)obj 

if([obj iskindofclass:[nsarray class]])

return arr;

}if([obj iskindofclass:[nsdictionary class]])

return dic;

}return [self getobjectdata:obj];

}

最後只要通過大家都知道的language-objectivec nsjsonserialization中的datawithjsonobject:options:error:即可。具體**如下:

在使用過程中發現父類屬性好像轉不了,在轉換的json中找不到父類的屬性。於是我就開始將目光對準了getobjectdata:這個方法。只要將這個方法進行稍微的改裝即可。具體改裝後見下方:

+ (nsdictionary*)getobjectdata:(id)obj 

else

[dic setobject:value forkey:propname];

}class = [class superclass];

} while (class != [nsobject class]);

return dic;

}

其中主要是加了乙個do-while的語句,該語句主要用於遍歷父類中的變數直到該遍歷到的類的父類為nsobject為止。這樣即可對父類的屬性進行遍歷。

再使用一段時間後發現陣列竟然轉不了json,總會出現轉不了json的情況於是乎又不得不去看看之前的方法有沒有進行改善。後來發現只要對nsarray進行遍歷一遍,並且加上[,]即可。然後我又對獲得nsdata後,轉nsstring進行了如下封裝:

+(nsstring *)getjsonstring:(id)obj 

} else

return jsonstring;

}

最後,終於可以愉快的玩耍了。

JSON轉Object的方式

2018年03月16日 20 59 43 晚安晚安沒你怎安 閱讀數 6779 以下為部分 片段 import com.alibaba.fastjson.jsonobject object obj new object obj是乙個有user相同屬性的物件 user user jsonobject.p...

JSON轉Object的方式

2018年03月16日 20 59 43 晚安晚安沒你怎安 閱讀數 6779 以下為部分 片段 import com.alibaba.fastjson.jsonobject object obj new object obj是乙個有user相同屬性的物件 user user jsonobject.p...

Object(所有類的父類,超類) 待補充

object類是所有類的父類,因此研究object類很重要。多看原始碼,多總結。object類方法 指示某個其他物件是否 等於 此物件。理解object 是乙個類,也是乙個物件。原始碼中對於object類來說 和equals是相同的。object的值是引用 位址 與equals沒有區別。對於基本型別...