使用kvc機制簡化對json的解析

2021-06-19 00:58:21 字數 1224 閱讀 5755

在 ios開發中,我們經常需要對伺服器的傳回來的json進行解析,特別是對哪些字段特別多的就會又煩躁的情緒。***都是一樣的東西,要為每個property賦值,真是累人啊。舉個簡單的例子吧。伺服器會過來的資料是:

{totalpage:100,page:2,desc:"***x",items:}

這個結構還是蠻簡單的吧。一般我們我們需要2個物件,乙個是result的物件,還有乙個是陣列中的子物件 item

@inte***ce result:nsobject

@end

@inte***ce item:nsobject

在解析的時,一般我是這麼做的

+(result*)resultwithdict:(nsdictory*)dict

//**item的解析類似上面的寫法

在定義inte***ce的時候我們默默的寫了一次屬性名稱,接著我們在解析的時候還要進行無聊的操作。不累嗎。對於簡單的json結構,我們還是可以忍受的,那麼對那些負責的結構呢,苦逼的人民啊!!

好吧進入主題,object c的動態性給我們造福不少,kvc和kvo機制都相當的不錯,必須贊乙個,可以說是完勝了cpp啊。我們使用object 的runtime和kvc機制把我們簡化**。不過這裡有些事情是必須要統一的,那就是屬性的命名規則必須和json的key一致(可以忽略大小寫和_),為啥呢,因為kvc需要這樣子,要不然就會出問題的。

首先,我們要知道自己的object有哪些property 名稱列表了,這樣才好從json的詞典中哪資料啊。下面就是獲取乙個object中的property name list了。

nsarray * getpropertynamelist(id object)

return propertynames;

}

拿到了屬性列表之後,後面就用kvc的機制來搞定吧。

+(result*)resultwithdict:(nsdictory*)dictelse

}@catch (n***ception *exception)

}return result;}

哎呀,貌似這個**比上面的要複雜的多了。哈哈,說的沒有錯。這個**可以用作基類或者對複雜的json結構是相當有用的。不過有一點需要注意的,用這種方式必然會降低效能的,追求效能極致的朋友還是不要用這個方法了。

ios使用kvc機制簡化對json的解析

在 ios開發中,我們經常需要對伺服器的傳回來的json進行解析,特別是對哪些字段特別多的就會又煩躁的情緒。都是一樣的東西,要為每個property賦值,真是累人啊。舉個簡單的例子吧。伺服器會過來的資料是 totalpage 100,page 2,desc x items 這個結構還是蠻簡單的吧。一...

ios使用kvc機制簡化對json的解析

在 ios開發中,我們經常需要對伺服器的傳回來的json進行解析,特別是對哪些字段特別多的就會又煩躁的情緒。都是一樣的東西,要為每個property賦值,真是累人啊。舉個簡單的例子吧。伺服器會過來的資料是 totalpage 100,page 2,desc x items 這個結構還是蠻簡單的吧。一...

KVC的實現機制

kvc和kvo都屬於鍵值程式設計而且底層實現機制都是isa swizzing,所以本來想放在一起講的。但是篇幅有限所以就分成了兩篇博文 kvo實現機制傳送門 kvc概述 kvc是key value coding的簡稱。它是一種可以通過字串的名字 key 來訪問類屬性的機制。而不是通過呼叫setter...