Json解析的一些問題

Json解析其實(shí)本身是一件很簡單的事情,但是本次在工作中剛好遇到了一些相關(guān)問題,所以找個(gè)時(shí)間記錄一下。

首先數(shù)據(jù)是放入Map集合然后使用Volley傳輸,本地緩存的時(shí)候使用了ORM數(shù)據(jù)庫,因此不可避免的遇到需要將實(shí)體對(duì)象轉(zhuǎn)為Map集合,或者M(jìn)ap集合轉(zhuǎn)為實(shí)體對(duì)象的問題。

因?yàn)轫?xiàng)目中本身使用了fastjson,所以這兩步轉(zhuǎn)換其實(shí)很簡單,fastjson自身并沒有提供直接的轉(zhuǎn)換方案,所以必須要中間過渡一下:

比如實(shí)體對(duì)象轉(zhuǎn)換為Map:

bean轉(zhuǎn)換為map

然后Map再轉(zhuǎn)換為實(shí)體對(duì)象:

map轉(zhuǎn)換為Bean

本身沒有什么問題,但是真正引入項(xiàng)目中后,QA反饋項(xiàng)目會(huì)很卡,于是進(jìn)行了分析(雖然后面發(fā)現(xiàn)跟這個(gè)暫時(shí)關(guān)系不大)。

首先針對(duì)Bean轉(zhuǎn)換為map進(jìn)行了修改,之前fastJson是需要先將Bean轉(zhuǎn)換為String,再轉(zhuǎn)換為Map,現(xiàn)在改成直接使用反射,來獲取Bean對(duì)象中的每一個(gè)屬性,以及對(duì)應(yīng)的get和set方法。

比對(duì)

效果確實(shí)不太一樣了。

但是其實(shí)本身項(xiàng)目中有十幾個(gè)Bean,然后每一個(gè)都有幾十個(gè)屬性,而且觸發(fā)上報(bào)的頻率其實(shí)相當(dāng)高,所以其實(shí)本身不太想用反射。

如果直接在每一個(gè)Bean對(duì)象中做序列化轉(zhuǎn)換呢?在每一個(gè)Bean中添加toMap(Object object)和toBean(Map map)的方法,再試一下效果呢?

添加JSONObject轉(zhuǎn)換

效果很明顯,原生直接轉(zhuǎn)換的速度會(huì)比反射高一個(gè)數(shù)量級(jí),然后直接反射比fastJson高1-3倍。

但是呢,直接手動(dòng)去掉反射,代價(jià)太大了,每個(gè)Bean都有幾十個(gè)屬性,過于復(fù)雜。

參考美團(tuán)對(duì)MSON的講解,可以想起來完全將這一步工作自動(dòng)化起來,那就使用AnnotationProcessor好了,編譯前對(duì)Bean進(jìn)行處理,添加對(duì)應(yīng)的兩個(gè)方法,減少人工處理的操作。

那么首先去AnnotationProcessor去看了一下,本來想自己編譯出jar包,但是感覺很麻煩,那就直接去MVN倉庫下載好了,這里只需要去下載androidannotations-4.4.0.jar和androidannotations-api-4.4.0.jar,地址:Group: AndroidAnnotations

AnnotationProcessor地址

按照下面的方式把兩個(gè)jar包放進(jìn)去:

AnnotationProcessor的jar包存放位置

然后就是開始配置,但是其實(shí)發(fā)現(xiàn)eclipse中的Java Compiler里面并沒有Annotation Processing,此時(shí)就需要安裝插件了,但是這里走了一個(gè)彎路,我自己的eclipse在安裝插件時(shí)候總是出現(xiàn)問題,所以直接去了eclipse官網(wǎng)查看并按照流程安裝:

Installing the Java Development Tools

安裝Eclipse Java Development Tools插件

至于如何配置compile-lib就比較簡單了,我是參照這篇文章操作的,比較簡單:

AndroidAnnotations開源框架如何下載與在eclipse的配置

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,562評(píng)論 19 139
  • 1.1 spring IoC容器和beans的簡介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器,...
    simoscode閱讀 6,851評(píng)論 2 22
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,697評(píng)論 18 399
  • 彭門慶歡酒飄香,娟娟片月涵冬影。 至今時(shí)距年關(guān)遠(yuǎn),冬青樹上掛凌霄。 快意暖心水餃香,樂在團(tuán)圓神飛揚(yáng)。
    南國梓桐君閱讀 299評(píng)論 0 2
  • 叩擊遠(yuǎn)方的馬蹄 只有炊煙可以讓它返回 那么 失路的愛人呢 黑白疾馳的河水 只有冬天才可以讓它停下 那么 歸于我的季...
    火流蘇_閱讀 583評(píng)論 3 10

友情鏈接更多精彩內(nèi)容