11 ответов:
- JSON encode() & расшифруйте()
- версия PHP >= 5.0.0
- предел вложенности 20.
- версия PHP >= 5.2.3
- предел вложенности 128.
- версия PHP >= 5.3.0
- предел вложенности 512.
- малый след против строки сериализации PHP.
- сериализовать() & unserialize()
- версия PHP >= 4.0.0
- методы не теряются на объекте типа данных PHP.
- __пробуждении() магический метод называется на любой объект восстановить. (ОЧЕНЬ МОЩНЫЙ)
- было отмечено, что это несколько раз лучше base64 encode строки помещаются в базу данных, и в base64 декодировать строка, взятая из базы данных с помощью этой функции, так как есть некоторые проблемы с управляемостью некоторые символы пробела.
выбор за вами.
Pro JSON:
- данные JSON могут использоваться многими различными языками, а не только PHP
- данные JSON удобочитаемы и доступны для записи.
- Он занимает меньше места
- это быстрее, чтобы закодировать в JSON, чем сериализовать
Pro Сериализованный Массив:
- это быстрее сделать unserialize, чем JSON декодировать
как показывают комментарии, JSON занимает меньше места, чем a сериализовать массив. Я также проверил, является ли JSON или сериализация быстрее, и, что удивительно, быстрее кодировать JSON, чем сериализовать. Быстрее восстановить, чем в JSON декодирования правда.
это скрипт, который я использовал для тестирования:
<?php function runTime(){ $mtime = microtime(); $mtime = explode(' ', $mtime); $mtime = $mtime[1] + $mtime[0]; return $mtime; } ?> <pre> <?php $start = runTime(); $ser; for($i=0; $i<1000; $i++){ $a = array(a => 1, x => 10); $ser = serialize($a); } $total = runTime() - $start; echo "Serializing 1000 times took \t$total seconds"; ?> <?php $start = runTime(); $json; for($i=0; $i<1000; $i++){ $a = array(a => 1, x => 10); $json = json_encode($a); } $total = runTime() - $start; echo "JSON encoding 1000 times took \t$total seconds"; ?> <?php $start = runTime(); $ser; for($i=0; $i<1000; $i++){ $a = unserialize($ser); } $total = runTime() - $start; echo "Unserializing 1000 times took \t$total seconds"; ?> <?php $start = runTime(); $json; for($i=0; $i<1000; $i++){ $a = json_decode($json); } $total = runTime() - $start; echo "JSON decoding 1000 times took \t$total seconds"; ?> </pre>
переносимость: победитель JSON. JSON поддерживается на более широком спектре платформ, в то время как PHP-де-сериализация поддерживается только (насколько я знаю) PHP. Хотя можно анализировать любой формат на любом языке, JSON имеет больше готовых библиотек.
будущее доказательство: победитель JSON. JSON является "стандартом" в том смысле, что Javascript является стандартом и вряд ли изменится в любое время в будущем. Группа PHP не дала никаких обещаний относительно будущего формата сериализации, и хотя это вряд ли изменится в будущем, тот факт, что одна группа управляет форматом, означает, что вы можете получить будущие данные, которые не читаются.
верность: победитель PHP. Сериализация PHP позволит вам хранить данные с собственными типами данных PHP, включая объекты, определенные пользовательскими классами. JSON позволит вам хранить только общие примитивные типы, списки примитивных типов ("массивы") и объекты пары ключ/значение. Сериализация PHP может предоставить некоторые преимущества здесь, Если вы разработка PHP-приложения.
размер файла: JSON имеет небольшой выигрыш здесь, так как текущий формат сериализации PHP является более подробным (поскольку он хранит больше информации).
производительность: кто знает, это зависит, профиль.
вывод: идите с JSON, если у вас нет веской причины использовать сериализацию PHP .
JSON более портативен, т. е. вы можете более легко читать/писать на него с разных языков и т. д. Если бы вы использовали PHP сериализованные массивы, вы могли бы легко использовать PHP для доступа к нему.
вы используете свои данные только с PHP ? Если да: массивы, если нет: JSON.
Pro Array
- сеансы использовали сериализацию : я думаю, что это быстрее, чем json_encode/decode (не совсем уверен)
- многие функции на массивах в PHP (сортировка / слияние/...)
Pro JSON
- JSON знает на других языках и веб-языках
- менее подробный в базе данных
- многие инструменты, такие как XML : JSON Схема
было много таких вопросов по так.
предпочтительный метод для хранения PHP массивов (json_encode vs serialize)
короче: JSON лучше подходит для простых данных, но он не различает разницу между объектом и ассоциативным массивом. Сериализованные данные больше.
используйте json для массивов и связи с Javascript или другим языком. Использование сериализации для объекта или какого-либо внутреннего PHP для работы для текущего запуска скрипта.
Если вы пытаетесь обойти кавычки и специальные символы в вашем JSON.stringify (obj) ,вы можете сделать это в PHP, используя его специфичные для базы данных методы экранирования.
<?php mysql_real_escape_string(htmlspecialchars($value)) ?>теперь вы можете хранить это безопасно и декодировать его, когда вы читаете его обратно
JSON бьет сериализацию, как уже указывалось в большинстве ответов. Я думаю, что самое большое преимущество-это независимость от платформы. У вас могут быть другие приложения, которые взаимодействуют с вашей базой данных, и они могут не иметь ничего общего с php.
но и решений нарушение нормализации базы данных. Ваша база данных даже не будет в первая нормальная форма поэтому вы не можете воспользоваться любой функцией базы данных, как, скажем, поиск. Бест подход заключается в использовании объектно-реляционного сопоставления. Есть хорошие библиотеки там - рассмотрим, например,учение ОРМ.
У меня просто была эта большая проблема с сериализация в PHP. Я хранил много данных в одном поле, в котором я использовал unserialize читать.
Что произошло, так это то, что я получил некоторые поврежденные данные в этом поле. Сериализовать сопоставление данных с помощью кодов типа "a", " s " и "N". Если есть поврежденные данные, карта не удалась. Он покажет ошибку php, что функция unserialize не может работать из-за ошибки байтового кода.
Так что моя точка зрения, чтобы избежать сериализовать. Иди с JSON, путь безопаснее, и вы не будете биться головой о будущие проблемы Майоров.
для меня, не более сериализовать.
atm, json_encode () работает только с кодированными данными UTF-8.. поэтому он не может кодировать символы, такие как "ñ", иначе он возвращает NULL
Comments