2013-07-04 75 views
2

我的iPad應用程序需要解析一個10 MB的JSON文件並將其內容保存在Core Data中。NSJSONSerialization vs stream based parser

你會推薦使用NSJSONSerialization考慮到大文件大小和內存佔用還是寧願選擇基於流的 JSON解析器(你會在這種情況下,建議其基於流的解析器)?順便說一下:該文件是由另一個iOS應用程序創建的NSJSONSerialization

謝謝!

+1

如果使用「基於流」,則表示與某些XML解析器類似的解析器,您可以在其中「詢問」特定位數的數據,並將其「解析」,解析整個文件並將結果數據返回「塊」,這種類型的JSON解析器很少。這在很大程度上是因爲解析的JSON的內部表示比XML的典型內部表示更加緊湊,因此一次解析所有內容更爲實用。 (另外,您無法像使用XML一樣保證JSON對象中項目的順序。) –

回答

4

我推薦這兩個,因爲NSJSONSerialization有方法JSONObjectWithStream:options:error:


你可以改爲使用this JSON parsing framework

+0

但是解析器構建的字典結構會在解析過程完成後立即分配10 MB內存?這不會導致iOS內存警告? – AlexR

+0

這取決於它是什麼以及它是如何格式化的。 10MB的JSON文本不一定等同於內存中的10MB數據。如果它在內存中會很大,那麼你不想在任何時候加載(所以你不想分析)整個事情。 – Wain

+1

通常,JSON文件的解析表示將比源文件大一點(可能是3-5x)。 JSON中只有很少的「糖」,並且JSON中的所有字符串都需要在解析器輸出中表示。字符串將擴展爲2個字節或4個字節的表示形式,另外還有對象開銷,以及管理語言數組和字典的開銷。 –