Сериализировать или json в PHP?

Таким образом, я должен закодировать массив в PHP и сохранить его в простом тексте в базе данных MySQL, мой вопрос, должен я использовать сериализировать () или json_encode ()? Каковы преимущества и недостатки каждого из них?

Я думаю, что любой из них сделал бы в этой ситуации. Но какой Вы предпочли бы и почему? Если это для чего-то другого, чем массив?

46
задан datasn.io 4 April 2010 в 14:35
поделиться

3 ответа

Главное преимущество serialize : он специфичен для PHP, что означает, что он может представлять типы PHP, включая экземпляры ваших собственных классов - и вы получите обратно ваши объекты, все еще экземпляры ваших классов, при разгруппировке данных.


Главное преимущество json_encode : JSON не специфичен для PHP: есть библиотеки для чтения/записи на нескольких языках - это означает, что он лучше, если вам нужно что-то, чем можно манипулировать с помощью другого языка, а не PHP.

Строку JSON также легче читать/писать/изменять вручную, чем сериализованную.

С другой стороны, поскольку JSON не является специфичным для PHP, он не знает о вещах, которые специфичны для PHP - например, о типах данных.


Пара попутных замечаний:

  • Даже если есть небольшая разница в скорости между этими двумя способами, это не должно иметь большого значения: вы, вероятно, не будете сериализовать/несериализовать много данных
  • Вы уверены, что это лучший способ хранения данных в базе данных?
    • Вы не сможете делать много запросов к сериализованным строкам в БД: вы не сможете использовать ваши данные в where, ни обновлять их без вмешательства PHP...
49
ответ дан 26 November 2019 в 20:31
поделиться

Если ваши данные никогда не будут покидать ваше PHP-приложение, я рекомендую serialize (), потому что он предлагает множество дополнительных функций, таких как __sleep () и __wakeup ( ) для ваших объектов. Он также восстанавливает объекты как экземпляры правильных классов.

Если вы передадите сериализованные данные другому приложению, вы должны использовать JSON или XML для совместимости.

Но сохранить сериализованный объект в базе данных? Может тебе стоит подумать об этом еще раз. Позже это может стать настоящей проблемой.

2
ответ дан 26 November 2019 в 20:31
поделиться

Во-первых, сериализация массива или объекта и сохранение его в базе данных обычно запах кода. Иногда люди заканчивают тем, что помещают список, разделенный запятыми, в столбец, а затем попадают во всевозможные проблемы, когда позже обнаруживают, что им нужно сделать запрос по нему.

Так что подумайте об этом очень внимательно, если это такой ситуация.

Что касается различий. Сериализация PHP, вероятно, более компактна, но может использоваться только с PHP. JSON является кроссплатформенным и, возможно, более медленным для кодирования и декодирования (хотя я сомневаюсь в этом).

5
ответ дан 26 November 2019 в 20:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: