我正在和朋友做一個遊戲。現在有一個關於水平的問題。第一個版本是用XML構建的。我不喜歡它的原因有很多:數據太多,我們使用的解析器存在一些問題。我們正在使用Boost,所以我決定看看json-parser。文檔格式
該結構小得多,並進行了優化。你怎麼看,從強大的xml轉變爲簡單的json,這不是太激進嗎?是否有足夠的json結構能力來組織大型遊戲級別的大量額外數據和屬性?
我正在和朋友做一個遊戲。現在有一個關於水平的問題。第一個版本是用XML構建的。我不喜歡它的原因有很多:數據太多,我們使用的解析器存在一些問題。我們正在使用Boost,所以我決定看看json-parser。文檔格式
該結構小得多,並進行了優化。你怎麼看,從強大的xml轉變爲簡單的json,這不是太激進嗎?是否有足夠的json結構能力來組織大型遊戲級別的大量額外數據和屬性?
我在使用python編寫的webapps中使用JSON很多 - 對於XML和JSON都有很好的解碼器。除了XML需要更多空間外,實際上沒有什麼區別,但更具可讀性。 JSON看起來已經很像Python字典了,所以這很有道理。可能是JSON在網絡上更常見的主要原因是JSON-RPC非常好,而XML-RPC沒有想到,而且SOAP太重了。
因此,它取決於您是否可以找到一個好的JSON解碼器,它的速度足夠滿足您的需求。我不知道經常用C/C++進行提升或工作。
我認爲JSON比XML更適合面向數據的用例(比如我的假設)。 XML作爲標記語言是很好的;或者當需要混合和匹配多個詞彙時。 我沒有發現XML更強大的這種用例;並且沒有理由不能將您想要的任何數據映射到JSON結構。使用XML很大程度上來源於處理工具和XML詞彙表,而不是本身相當簡單的核心標記語言。
很有可能XML和JSON都可以爲你工作,所以也許只是看看哪個更適合你的開發風格。
如果您已經在使用將其放入DOM對象的閱讀器,我認爲從XML切換到JSON是不值得的麻煩,除非您在過程中最終更改了數據格式。特別是如果您使用編輯器創建程序數據,因爲您將擁有比JSON更好的編輯XML文檔的工具。這些DOM對象的解析時間很可能在實現之間不會有太大的差異,但如果這是一個問題,那麼您的JSON實例DOM對象可能會佔用較少的空間。您將能夠以XML或JSON格式存儲您需要的任何內容,所以不應該擔心。作爲一個關卡描述語言,我會使用XML,因爲我可以定義一個模式,如果需要的話,手動編輯更容易。此外,聽起來像您可能希望能夠在數據正在讀取時有效地創建這些級別,並且如果不需要儘快使用所有額外的實例數據,則可以忽略這些數據。一個XML SAX或拉解析器將是理想的。
現在我的簡短答案已經結束,我會多瞭解一些信息,以幫助您更好地爲自己做出決定。
你想如何訪問數據?你想簡單地閱讀它,並有一個大對象訪問,或者你只需要查看一次數據來創建基於這些信息的對象?在分析過程中,您是否對性能有任何擔憂,以及您可以多快地響應正在讀入的新信息?您的數據格式可能會改變很多?你想提供一個可以在應用程序之外共享這些信息的標準嗎?我使用什麼編程語言?根據語言的不同,一些語言對於JSON和XML具有非常好的工具。
根據與應用程序相關的用例,給出唯一的選擇JSON或XML。
如果我需要真正調整解析器中的性能,並使用可以描述和共享的非常結構化的格式,並且不太可能經常更改,那麼我會使用XML。我可以使用模式來描述數據結構的要求,並允許其他人輕鬆地支持我的數據文件。如果我的信息很大,我也會使用XML,並且我希望有機會以塊的形式解析數據,並將它們直接存儲到對象中,這樣會比使用通用DOM模型和解析器的腳印更小。我會使用SAX推送閱讀器或流讀取器,如果我需要在讀入信息時對其進行響應,則可以使用SAX推送閱讀器或流讀取器。有許多優秀的庫可以快速輕鬆地爲XML執行此操作。如果我需要手動編輯數據或爲了調試目的而打印出來,那麼XML文檔就已經處於良好的格式。
我會使用JSON,如果我需要保存實例文檔空間,我想要一個DOM類型的對象。如果我有兩個應用程序只是嘗試傳遞Python和Java等數據,我會使用JSON,因爲它可以將這些實例對象與setter和getter讀取到一起,而不需要複雜的framwework,儘管這會讓事情變得緩慢。如果我的需要是僅序列化和傳輸數據對象,那麼如果這些是我唯一的選擇,JSON將是我對XML的選擇。
此外,XML是DOM風格編碼,順序分析等的更好匹配,而JSON更適合字典,關聯數組等。所以它取決於你如何編碼你的遊戲到目前爲止,我猜。 – jambox 2010-12-09 12:21:30