cJSON解析數據如何避免過多if-else,實現解耦


代碼展示:

 

 

數據接收函數內,解析cJSON數據時,一不小心就會冒出來一大堆if語句在一個函數內,后續想要新增網絡功能時,必然又會導致需要在mqtt訂閱函數內去新增部分代碼,實現解析新的報文。

這顯然耦合性很強。

解耦實現要求至少以新增函數的方式來增加業務功能,而非直接在原來的函數內部去進行新增或修改。


那么如何避免在解析cJSON時一個函數內出現過多的if語句呢?
先來思考,出現很多if語句,說明我們的cJSON格式的報文有很多的同級對象,不同的對象對應不同的業務,

所以我們應該以業務來進行划分,盡量將不同的數據解析划分到對應的業務代碼模塊中去。

而不是全部都放在一塊,那樣自然顯得擁擠和不完美。

 

上圖的方式是事先注冊好根對象內的第一級別的下級對象,然后解析時遍歷取出這些對象名,在收到的cJSON數據中去進行匹配,如果匹配上了,則進行后續的該對象的值處理。

如果沒匹配上(cJSON_GetObjectItem函數返回NUILL),則繼續嘗試匹配下一個對象名看是否需要進行值處理。

 

注冊-取出的思維在編程中很常用,這也是設計模式中觀察者模式的一個運用。

 

 

 

.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM