1. 程式人生 > >序列化和json區別

序列化和json區別

序列化是將物件狀態轉換為可保持或可傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換為物件。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料。

將物件的狀態資訊轉換為可以儲存或傳輸的窗體的過程。 在序列化期間,物件將其當前狀態寫入到臨時或永續性儲存區。以後,可以通過從儲存區中讀取或反序列化物件的狀態,重新建立該物件。

通常,物件例項的所有欄位都會被序列化,這意味著資料會被表示為例項的序列化資料。這樣,能夠解釋該格式的程式碼有可能能夠確定這些資料的值,而不依賴於該成員的可訪問性。類似地,反序列化從序列化的表示形式中提取資料,並直接設定物件狀態,這也與可訪問性規則無關。 對於任何可能包含重要的安全性資料的物件,如果可能,應該使該物件不可序列化。如果它必須為可序列化的,請嘗試生成特定欄位來儲存不可序列化的重要資料。如果無法實現這一點,則應注意該資料會被公開給任何擁有序列化許可權的程式碼,並確保不讓任何惡意程式碼獲得該許可權。

【JSON的概念】

JSON,JavaScript Object Notation,一種更輕、更友好的用於介面(AJAX、REST等)資料交換的格式。 JSON是結構化資料序列化的文字格式,作為XML的一種替代品,用於表示客戶端與伺服器間資料交換有效負載的格式。它是從ECMAScript語言標準衍生而來的。JSON的設計目標是使它成為小的、輕便的、文字的,而且是JavaScript的一個子集。

【長度的比較】

serialize在編碼後大概是json的兩倍

原因:

  • serialize後字串包含了子串的長度,這可能是速度方面的優化,典型的空間換時間,但是它本身還是太重了。
  • serialize有更加詳細的型別區分,而json只有四種類型,並且是以簡單的符號表示。

【速度的比較】

serialize的速度在大資料量的情況下比json差了快一個數量級。

從上面兩點看,json不管是在速度還是在生成的字串的大小上都比serialize要好,那為什麼serialize還要存在呢? 原因在下面這個點:實現的功能。

【處理物件】

json無法處理物件方法等資料。

【使用範圍】

  • 序列化使用serialize,特別是物件的儲存。這是其存在的意義。
  • 與物件無關的資料儲存可以使用json,如包含大量數字的陣列等。只是當遇到這種情況,我們需要做的可能是重構資料庫了。
  • 資料交換時使用JSON,這也是其定義所在。
  • 目前JSON是能用於UTF-8編碼的資料。

來源:http://blog.sina.com.cn/s/blog_6e07f1eb0100rsax.html

總結: To encode a simple array, JSON which is OK with both PHP AND javascript, maybe other languages. To encode a PHP object, serialize is a better choice because of specificity of PHP Objects only instanciable with PHP. To store datas, either store encoded datas in a file or use MySQL with standard format.

來源:http://stackoverflow.com/questions/2574728/serialize-or-json-in-php