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

2021-07-07 10:09:58 字數 1264 閱讀 3705

在 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(

idobject)  

return

propertynames;  

}  

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

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

}@catch

(n***ception

*exception)   

}  return

result;"font-family:arial,helvetica,sans-serif"

>}

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

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

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

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

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

IOS 廣播機制與 android 廣播機制對比

android下廣播機制的實現機制 1.傳送 context的 sendbroadcast實現,傳入intent即可,intent提供了攜帶很多基本型別等的方法,如果想傳遞複雜物件,應該實現parcelable介面,parcelable介面提供了物件序列化的一系列方法。2.接收 接收主要有兩種方法 ...