2013-05-18 67 views
1

我只是想知道如果任何人都可以推薦一個比org.json更好的替代方法來解碼複雜的JSON字符串。作爲參考,這將來自Web服務器直到Android(iOS,但這是另一個開發者的問題!)設備,它不必恢復。解碼複雜的JSON字符串到各種對象

該字符串是下列性質...

{"header":"value","count":value, ..., "messages":[ 
    {"messagetype":1,"name":"value"}, 
    {"messagetype":2,"name":"value","name":value}, 
    {"messagetype":1,"name":"value"}, 
    {"messagetype":3,"name":"value","subvalues":["value",value,value]}, 
    ... 
    {"messagetype":4,"name":value,"name":"value","name":value} 
]} 

基本上,有一些報頭字段,我可以永遠依靠但這時會出現一個消息「陣列」,變量計數,內容和順序。

我一直在研究這幾天,現在已經駁回GSON和其他一些人,因爲這要麼事先知道確切的結構和/或不能很好地處理嵌入的類型(包含的消息)。

回答三個this question向我指出使用org.json library,我知道我可以使用通過字符串解析,但我想這個問題的答案的答覆(」 這是超級老學校,沒有人使用該庫了在現實中的一個世界「)讓我質疑我的做法。

任何人都可以提出一個圖書館/方法可以更好地處理這個問題嗎?如果其他人已經使用另一種方法來處理這種複雜和可變的結構類型,我會非常感激你的意見。

在此先感謝。

+0

你的消息行上是否有這些錯別字? '{「messagetype」:2,「name」:「value」,「name」:value}'無效JSON(不能有重複鍵,不能有非分隔字符串文字)。其實,你的整個JSON例子都是亂七八糟的語法。 – Perception

+0

該示例是傳達結構的近似值,而不是有關數據的確切示例,因此「具有以下性質」 – Mike

+1

Android附帶三個嵌入式JSON庫。我會建議看看[Gson](https://code.google。com/p/google-gson /),因爲它不僅可以做你認爲它不會做的事,它還提供了許多你最終需要的功能(儘管你現在不認爲你會這麼做)。對於手動解析,請從[JsonParser](http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html?com/google/gson/JsonParser.html)課程開始。 – Perception

回答

1

我真的不約org.json libray的意見一致:「這是超級老學校,沒有人使用該庫了在現實世界中」,因爲通過使用這個庫是非常簡單的解析JSON。另外,json可以得到多少複雜的東西,我的意思是說,關鍵/值對都是如此複雜,沒有什麼不能用幾行代碼解決的,例如我會向你演示幾個例子,以便你能夠得到相信這是非常簡單的事情:
假設你有從包含你在一個JSON數組需要格式化所有的信息服務器的響應,那麼你可以做這樣的事情來解析字符串:

JsonArray arrayJson = new JsonArray(response); 

但現在你想要訪問arrayJson孩子:

for (int i = 0; i < arrayJson.length() - 1; i++) 
{ 
    JsonObject json = arrayJson.getJSONObject(i); 
} 

現在假設你有另一個json的數組,他的for循環: 然後你會得到他們這樣說:

for (int i = 0; i < arrayJson.length() - 1; i++) 
{ 
    JsonObject json = arrayJson.getJSONObject(i); 
    JSONArray anotherArray = json.getJSONArray("key"); 
} 

.....,更嵌套你可以處理他們以同樣的方式,所以我覺得我建立了我的觀點。請記住,有時候,爲尋找更簡單的方法而努力工作,可能會讓他們更難以做到。

+0

感謝您的評論,它支持我原本以爲當我看到旁邊的舊學校評論時所想的。我完全同意你所說的話,坦率地說,因爲它的簡單性,它認爲它是一個更靈活和優雅的解決方案。 – Mike

+0

聰明爲你,簡單的代碼==更好的解決方案。 – Daniel

+0

很高興接受您的答案,因爲它與我自己的原創思想不謀而合,而且我相信這將給我提供最靈活的解決方案。在很多方面,我更喜歡編寫我自己的解析解決方案,將org.json解析與更深入軌道中的gson進行比較將會很有趣。 – Mike