1. 程式人生 > >scala使用fastjson之JSONObject cannot be cast to JSONArray

scala使用fastjson之JSONObject cannot be cast to JSONArray

這件事一定要好好寫一篇部落格說一下,它整整折磨了我一天

最近在用spark寫一個數據分析的專案,原始檔是json,所以就使用了fastjson這個包,然後就到了噩夢時刻

其實本地都弄好了,執行也沒什麼問題,但是把jar包上傳到master上執行,就會報題目中出的錯,一開始,我以為是因為我使用了scala和java結合(其實我內心不覺得會是這個原因,但是沒辦法),我呼叫fastjson的程式碼是用java寫的,主類和其他類都是用scala寫的,然後出現這個錯誤後,沒辦法,我又用scala寫了一遍fastjson的呼叫處理,結果不出意料,還是報錯,我很早就查過相關部落格,百度,google都用了,中外網站都看了,最後終於找到了一篇涉及一點的部落格,這才解決了問題.下面說一下問題和解決:

其實報這個錯,就是把JSONObject轉成JSONArray不行,(我覺得是在scala中不行,因為我又寫了一個測試jar包,都是java,jar包可以執行,我猜是因為fastjson這個包本身是java包,或者因為在叢集上執行,總之這個問題我後面會再做測試解決,這裡寫說這個解決)

既然JSONObject轉成JSONArray不行,那麼我就不轉了,遇到這個問題的程式碼大概上是這樣的

JSONArray jsonArray = (JSONArray)jsonObject ; 

或者

JSONArray jsonArray = jsonObject.getJSONArray(mark) ;

這些或顯式或隱式的都是將JSONObject轉成JSONArray,這裡我們不用這些,而是

String temp = jsonObject.getString(mark) ;

JSONArray jsonArray = JSON.parseArray(temp) ;

這樣,我們就跳過了JSONObject轉成JSONArray,雖然多了一句,但是可以解決問題

未完待續....