java — Сериализация простыми словами
Вопрос задан
Изменён 1 год 4 месяца назад
Просмотрен 45k раз
Много раз встречал эту «сериализацию» на разных ресурсах, часто связано с JSON.
Объясните, пожалуйста, простыми словами, что такое сериализация, где и зачем ее применяют ?
- java
- android
- serialize
Сериализация — это преобразование объекта или дерева объектов в какой-либо формат с тем, чтобы потом эти объекты можно было восстановить из этого формата. Используется, например, для сохранения состояния программы (то есть, некоторых её объектов) между запусками. Или для передачи данных между различными экземплярами программы (или различными программами), например, по сети.
Главная идея состоит в том, что сериализованный формат — набор байт или строка, которую можно легко сохранить на диск или передать другому процессу или, например, по сети, в отличие от самого объекта. А значит, задача сохранения объекта/группы объектов при этом сводится к простой задаче сохранения набора байт или строки.
JSON — один из популярных форматов для сериализации, он текстовый, легковесный и легко читается человеком.
Пример: если у вас есть класс
class Test { int length; String name; public Test(int length, String name) { this.length = length; this.name = name; } }
Объект этого класса в сериализованной форме может иметь вид
{ "length": 25, "name": "Имя" }
Саму сериализацию (и десериализацию) можно производить вручную, или пользоваться соответствующими библиотеками/фреймворками.
Существуют и бинарные форматы сериализации.
17Сериализация в общем виде — это процесс сохранения объекта в виде последовательности байт, чтобы в будущем по этой последовательности можно было бы восстановить исходный объект. В частном случае — это может быть сохранение в текстовую строку, хотя это далеко не обязательно.
Если объект сериализуется в текстовую строку, то тут могут быть разные форматы, включая XML и упомянутый в вопросе JSON. Последний для этой цели наиболее популярен в последнее время, т.к. JSON — это и так представление объекта в том формате, как объект создается в JavaScript. Собственно, JSON и переводится как JavaScript Object Notation.
Сериализацию можно использовать для хранения объектов на диске, для передачи его по сети или для передачи объекта другому процессу.
Процесс, обратный сериализации, называется десереализация. В случае, если другой процесс получает строку JSON, то он должен десереализовать строку в объект.
Если на кошках Вы пишете эмулятор кота — тамагочи. У вас есть объект класс cat
class Cat { private int age; private int weight; // other cat logic }
Вы хотите, чтобы при следующем запуске приложения этот же кот продолжал жить своей жизнью, а не пересоздался заново. Для этого вы реализуете сериализацию\десериализацию кота — то есть созранение\загрузку. Как — так как вам удобно. Можно сделать его Serializable и хранить в бинарном виде, можно сохранять в текстовый файл как JSON (JavaScript Object Notation), можно в базе хранить. Главное — вы сохраняете каким-то образом его состояние (в данном случае — поля), и потом, когда вам это будет нужно, их загружаете. Так же сериализованного кота можно будет например передать по сети на сервер. То есть вы передаете его состояние, а сервер у себя создаст новый объект класса Cat и установит у него это состояние (age и weight).
1Сериализация используется для хранения сущностей в виде строки. Например можно взять объект, сериализовать и записать в базу данных.
Json — формат представления данных. Он может представлять объекты или массивы. Эти сущности также можно сериализовать. Если вывести сериализованый объект в Json, то можно получить строку сериализованного объекта.
0Сериализация — это преобразование данных. Если из более «понятного» в менее — это сериализация. А наоборот — десериализация.
Десериализовывать данные нужно, например, чтобы придать им человеко-читаемы вид, или такой формат, который можно и\или удобно использовать в работе приложение.
Сериализовать данные нужно, например, для хранения или пересылки. Потому что — есть определённый формат хранения\пересылки данных и данные нужно в него преобразовать.
Очень часто речь идёт о преобразовании в JSON — для отправки на сервер — это сериализация. И обратно — для использования в приложении — это десериализация.
Например — в интерфейсе приложения данные должны быть представлены в виде таблицы — и их нужно правильно достать из JSON и напихать в ячейки. Потом эти данные изменит пользователь и их нужно будет преобразовать обратно в дерево JSON, чтобы отправить на сервер.
Вот и всё… А вот это вот «процесс перевода структуры данных в последовательность байтов» — видимо сухая формулировка из старого учебника, которая мало способствует пониманию.
1Зарегистрируйтесь или войдите
Регистрация через Google Регистрация через Facebook Регистрация через почтуОтправить без регистрации
ПочтаНеобходима, но никому не показывается
Отправить без регистрации
ПочтаНеобходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
Сериализация и десериализация данных.
Создание модели схемы клиента.Время прочтения: 3 мин.
Немного теории.
Что такое сериализация?
Сериализацией называют преобразование информации либо в двоичную, либо в текстовую форму. Если объект сериализуется в текстовый вид, то тут можно использовать разные форматы, например, XML и JSON.
JSON — один из популярных форматов для сериализации, который полностью не зависит от языка программирования, на котором реализована программа, но использует соглашения, знакомые программистам C-подобных языков.
Соответственно, десериализация – это обратное преобразование битов в объекты.
Сериализация нужна, когда требуется сохранить большие данные в плоские файлы и извлечь на более позднем этапе. Без сериализации осуществить это сложно, может возникать множество ошибок из-за сложности структур данных.
Сериализация с использованием Python.
Для работы с сериализацией в Python существуют специальные библиотеки, одной из них является Marsmallow.
Marshmallow, представляет собой объектно-реляционную картографическую библиотеку, которая используется для преобразования объектов в типы данных Python и обратно. Она часто используется вместе с SQLAlchemy, ORM, которая сопоставляет схемы баз данных с объектами Python. Давайте посмотрим, как использовать Marshmallow.
Во-первых, нам нужно создать схему для моделирования того, что мы хотим сериализовать и десериализовать. Давайте создадим модель для нашей схемы, которая называется Client.
import datetime as dt class Client: def __init__(self, name, inn): self.name = name self.inn = inn self.created_at = dt.datetime.now()
Затем необходимо создать схему, используя класс, который сопоставляет имена атрибутов с объектами полей.
from marshmallow import Schema, fields
class ClientSchema(Schema): id = fields.Integer() name = fields.Str() inn = fields.Str() created_at = fields.DateTime()
Сериализация объектов.
Мы передаем объект в метод dump(s) схемы для сериализации (object to Python type), и мы используем метод dumps() для возврата строки в кодировке JSON или dump (), если мы хотим вернуть дикт объекта.
client = Client(id = 1,name="ООО", inn="000000000") schema = ClientSchema() result = schema.dumps(client) result
#Output: {"created_at": "2021-08-06T08:19:57.258180", "name": "OOO", "id": 1, "inn": "000000000"}
Мы также можем отфильтровать, какие поля мы хотим вывести
short_schema = ClientSchema(only=("name", "inn")) short_schema.dump(client)
#Output: {'inn': '000000000', 'name': 'ООО'}
Десериализация объектов.
По умолчанию метод load возвращает Python dict с отображением имен полей и значений.
client_data = { "created_at": "2021-08-06T08:19:57.258180", "id": "1", "inn": "000000000", "name": "OOO", } schema = ClientSchema() result = schema. load(client_data) result
#Output: {'created_at': datetime.datetime(2021, 8, 6, 8, 19, 57, 258180), 'id': 1, 'inn': '000000000','name': 'OOO'}
Итак, мы видим, что сериализация и десериализация объектов в Python является важной неотъемлемой частью любой программы. Сериализация полезна для больших данных, для упрощения работы при их передаче и сохранении.
На примере модели схемы Client можно убедиться, что Marshmallow является мощным инструментом для сериализации. При использовании сериализатора будет достаточно одной строки для сохранения словаря, а при написании кода вручную, получится объемный и скорее всего глючный код. Так что плюсы использования сериализаторов очевидны.
— Темы Scaler
Обзор
Проще говоря, сериализация означает преобразование объекта в последовательность байтов, а десериализация — прямо противоположное. При десериализации объект восстанавливается из последовательности байтов. В Java Сериализация и десериализация играют большую роль в передаче данных и их сохранении в базе данных или на диске. Давайте погрузимся и выясним, как это происходит и какое конкретное значение имеют эти термины в Java.
Scope
- В этой статье определяется и объясняется, как реализуются сериализация и десериализация в Java.
- Он призван помочь читателям глубже понять варианты использования сериализации и десериализации.
- После этого вы сможете реализовать сериализацию и десериализацию в Java.
Обязательное условие
Знание основных конструкций Java (базовый синтаксис, пакеты, методы и т. д.) и основных концепций ООП в Java должно быть очень полезным для продвижения вперед.
Введение
Прежде чем углубляться в тему, давайте рассмотрим пример из реальной жизни, который поможет вам оценить концепцию сериализации и десериализации в Java.
Предположим, вы разговариваете с другом по телефону, т. е. через сотовую сеть . Голос сначала преобразуется в электрические сигналы, которые далее распространяются на вышку мобильной связи через радиосигналы. Затем эти электрические сигналы направляются вышкой на определенный телефонный номер. Итак, до вашего 9Голос 0025 ( в основном данные ) достигает другого конца, который может быть далеко, он проходит ряд преобразований.
В приведенном выше случае, когда данные в Java ( или объекты Java, поскольку это язык ООП ) перемещаются от одного интерпретатора (или виртуальной машины Java) к другому, происходит несколько преобразований. В основном это сериализация и десериализация. Давайте узнаем больше об этом!
Что такое сериализация в Java?
Объект в Java имеет три характерных свойства: Состояние: Представляет значение или данные объекта. Поведение: Поведение говорит нам о функциональности объекта. Identity: Как следует из названия, помогает однозначно идентифицировать объект. Сериализация по определению означает механизм преобразования состояния объекта в поток байтов для сохранения или передачи объекта в память, базу данных или файл.
Объекты, которые мы создаем в Java, хранятся в памяти и удаляются сборщиком мусора, когда они больше не используются. Если этот объект должен быть передан, например, вы хотите отправить его по сети, он должен быть в зашифрованном и совместимом формате. Для этого объект необходимо преобразовать в поток байтов.
Здесь следует отметить, что поток байтов не зависит от платформы, что означает, что после сериализации объекта на одной платформе его можно преобразовать обратно в исходное состояние на любой другой платформе.
Теперь давайте поговорим о том, как добиться сериализации в Java. В Java есть что-то под названием Marker Interface. Интерфейс маркера — это интерфейс без полей или методов. Все, что он делает, это добавляет какое-то особое поведение к классу. Итак, чтобы добавить сериализуемое поведение в наш класс, мы воспользуемся помощью маркерного интерфейса Serializable, который является частью пакета java. io. В следующем примере показано, как класс реализует интерфейс Serializable.
В приведенном выше фрагменте кода мы импортировали интерфейс Serializable, реализованный классом Employee. Таким образом, все объекты этого класса могут быть преобразованы в байтовый поток.
Мы добавили сериализуемое поведение в класс. Давайте посмотрим, как мы можем сериализовать объекты. Таким образом, для записи объектов в поток у нас есть класс ObjectOutputStream в Java. Это возможно только в том случае, если класс реализует сериализуемый интерфейс, и, таким образом, объекты могут быть переданы в качестве аргументов методам класса ObjectOutputStream.
Методы класса ObjectOutputStream
- Метод writeObject(): сериализует объект и записывает его в ObjectOutputStream.
- close() : Закрывает текущий поток.
- flush(): очищает текущий выходной поток.
Продолжая пример, давайте посмотрим, как можно сериализовать объект класса Employee.
Результат:
Внутри класса Persist мы создали объект класса Employee. Далее этот объект сериализуется методом writeObject(), и состояние объекта сохраняется в файл 9.0025 fout.текст . С помощью метода close() текущий поток закрывается.
Пример сериализации в Java
Рассмотрим несколько примеров с некоторыми условиями.
Пример 1: Сериализация в Java с наследованием
В ООП возможность класса получать свойства и символы от другого класса называется наследованием. У нас есть класс Parent/Super или класс Child/Derived . Возьмем пример:
Выходные данные:
Итак, в приведенном выше примере класс A является родительским классом, а класс B наследуется от класса A. Как видите, класс B не реализует Serializable, но по-прежнему имеет право на сериализацию. Это связано с тем, что в Java дочерний класс не должен реализовывать сериализуемый, если родительский класс уже сделал это.
Пример 2: Сериализация в Java с агрегацией
Агрегация в ООП — это метод повторного использования класса, в основном класс определяет другой класс как ссылку на сущность.
Выходные данные
Код приводит к ошибке, потому что, когда класс имеет ссылку на другой класс, все отдельные ссылки также должны реализовывать интерфейс Serializable.
Пример 3: Сериализация в Java с помощью массива или коллекции
Вывод:
Если какое-либо из полей сериализуемого объекта состоит из массива объектов, в этом случае все объекты также должны быть сериализуемыми. В противном случае должно возникнуть исключение NotSerializableException.
Как работает сериализация Java?
К этому моменту мы разобрались с сериализуемым интерфейсом и ObjectOutputStream Давайте разберемся, как работает алгоритм сериализации. Весь процесс сериализации происходит рекурсивно.
- Java использует функцию Reflection для проверки и очистки данных из полей объекта, которые должны быть сериализованы во время выполнения.
- Если объект находится внутри поля предыдущего объекта, он сериализуется в рекурсивным способом .
Зачем нужна сериализация Java?
Давайте перечислим несколько вариантов использования и поймем, зачем нам нужна сериализация в Java.
- Коммуникация : Преобразование объектов в потоки байтов помогает при передаче по сети, что позволяет нескольким системам проектировать, совместно использовать и выполнять объекты одновременно.
- Постоянство : Состояние любого объекта можно легко сохранить в базе данных и получить в любой момент времени.
- Клонирование : Это делает процесс клонирования очень простым, поскольку можно создать точную копию объекта, сериализовав его в битовый поток и затем преобразовав обратно в исходную форму.
- Экономия времени : Преобразование потока байтов в объект занимает гораздо меньше времени, чем создание фактического объекта из класса.
Почему Serializable не реализуется объектом?
Возникает вопрос, когда объект сериализуется, почему им не реализована сериализуемость?
Таким образом, будут возникать различные лазейки в системе безопасности. Что, если вы не хотите делать сериализуемыми определенные поля, например те, которые содержат учетные данные или конфиденциальную информацию?
Когда класс реализует сериализуемость, вы знаете, что все те поля, которые не подлежат сериализации, должны быть помечены как временные. ( Transient звучит несколько жаргонно, не так ли? Не беспокойтесь. Мы рассмотрели это в следующем разделе. ) Однако, когда мы рассматриваем реализацию сериализуемого объекта, что, если вы забудете пометить поля transient? Это было бы небезопасно.
Таким образом, лучше разрешить определенные классы, которые вы хотите сериализовать, чем проверять весь код и искать поля, которые не должны включаться при сериализации.
UID серийной версии в Java
В процессе сериализации среда выполнения Java связывает номер версии с каждым сериализуемым классом, который называется UID серийной версии . Этот атрибут действует как идентификатор в процессе сериализации и десериализации. Он проверяет и гарантирует, что тот же класс, который был там во время процесса сериализации, загружен. Отправитель и получатель сериализованного объекта должны загрузить один и тот же класс. Таким образом, если UID класса, загруженного получателем, не совпадает с UID соответствующего класса отправителя, это приведет к
Как объявляется этот UID SerialVersion? Мы можем объявить его собственный UID, объявив имя поля для любого сериализуемого класса. Синтаксис для того же: Синтаксис:
Например,
UID серийной версии объявляется для класса Employee.
Но что, если мы явно не объявляем UID для класса? Означает ли это, что не будет никакого идентификатора, связанного с классом? Что ж, среда выполнения сериализации позаботится об этой ситуации. Он назначает UID по умолчанию для класса на основе нескольких аспектов конкретного класса в соответствии со спецификацией сериализации объектов Java.
Команда Serialver в Java
Чтобы получить UID серийной версии для класса, в Java Development Kit есть встроенная команда serialver. Команда записывается так: serialver [-classpath classpath] [-show] [classname…]
Итак, здесь у нас есть две опции:
- -classpath: Эта опция помогает нам указать путь к классу или где искать конкретный класс.
- -show: опция show отображает простой пользовательский интерфейс, где вы можете ввести полное имя класса и нажать ENTER или SHOW, чтобы получить UID серийной версии.
Что следует помнить при реализации сериализуемого интерфейса в Java
Есть несколько моментов, которые необходимо помнить при реализации сериализации.
- Сериализуемый интерфейс должен быть реализован всеми связанными объектами.
- Если родительский класс уже реализовал интерфейс Serializable, в этом случае дочерний класс не должен его реализовывать.
- В процессе сериализации сохраняется только нестатических элементов данных .
- При преобразовании потока байтов обратно в исходный объект конструктор объекта не вызывается.
- Serializable Interface не имеет собственных методов или полей.
Преимущества сериализации
В основном мы рассмотрели достоинства и варианты использования сериализации в разделе, где мы обсуждали ее необходимость. Но если подытожить, то основными преимуществами сериализации являются:
- Она помогает сохранить состояние или данные объекта.
- Не зависит от платформы.
- Обеспечивает быструю и эффективную передачу объектов между двумя платформами.
- Помогает в создании реплик объектов, , т.е. их клонировании .
- Легко понять и настроить.
- Обеспечивает зашифрованные и безопасные вычисления Java.
Что такое десериализация в Java?
Точнее говоря, десериализация — это противоположность сериализации. Это ровно обратный процесс. Таким образом, чтобы определить десериализацию, это процесс преобразования потока байтов в исходное состояние объекта. Для выполнения десериализации в Java предусмотрен класс ObjectInputStream, который снова противоположен классу ObjectOutputStream, который мы изучали для сериализации. Поговорим о методах этого класса.
Методы класса ObjectInputStream
- readObject(): Этот метод преобразует поток байтов в состояние объекта. Другими словами, он считывает объект из входного потока.
- close(): как следует из названия, этот метод в основном закрывает поток ввода.
Пример десериализации в java
Теперь, когда мы поняли, как реализовать десериализацию, давайте возьмем тот же пример. В разделе, объясняющем сериализацию, мы взяли сериализуемый класс Employee и сериализовали его объект. Давайте десериализуем их.
Вывод:
Итак, здесь, в классе Persist, после завершения сериализации объекта мы переходим к десериализации. С помощью ObjectInputStream считывается объект из файла f. txt . Далее метод writeObject() выполняет десериализацию. Для проверки процесса мы распечатали поля объекта. Имя и идентификатор печатаются правильно. Таким образом, десериализация прошла успешно.
Как работает десериализация Java?
Итак, глядя на алгоритм десериализации, следует отметить, что конструктор объекта не вызывается. Создается пустой объект, и снова с помощью функции Reflection данные записываются в поля. Подобно сериализации, также включены частные и конечные поля.
Преимущества десериализации в java
- Это помогает реконструировать объект из потока байтов, а не создавать объект из класса, что занимает довольно много времени.
- Просто настроить.
- Встроенная функция Java, сторонний инструмент не требуется.
Объяснение уязвимостей десериализации Java
Проще говоря, уязвимости десериализации Java — это уязвимости безопасности, которые возникают, когда нежелательные или измененные объекты вставляются в процессе сериализации-десериализации вредоносными действиями. Давайте рассмотрим это для вашего Java-приложения. Вы восстанавливаете объект из потока байтов. Итак, вы ожидаете уже сериализованный объект, скажем, obj1. Однако вместо obj1 вы получаете obj2. Таким образом, извлеченный объект является результатом некоторых злонамеренных действий; это уязвимость десериализации Java. Ненадежные и вредоносные потоки байтов могут легко использовать уязвимый код десериализации.
Как предотвратить уязвимость десериализации Java?
Для предотвращения уязвимости десериализации Java можно использовать следующие подходы:
- Самый простой подход — выполнение проверки объектов из потока десериализованных объектов или, другими словами, базовая фильтрация ObjectInputStream. Существует несколько библиотек для выполнения этих действий проверки.
- Другой способ — запретить десериализацию объектов некоторых классов, черный список подход.
- Мы также можем разрешить десериализацию набора объектов утвержденных классов, подход с использованием белого списка. Десериализация будет происходить в ограничительном режиме, что позволит избежать возможности десериализации уязвимостей .
- Обновляйте библиотеки с открытым исходным кодом.
Java Transient Keyword
Давайте рассмотрим случай, когда вы сериализуете объект и хотите, чтобы определенное поле объекта не сериализовалось. Чтобы добиться этого, мы можем воспользоваться помощью ключевого слова transient. Таким образом, ключевое слово Java transient помогает предотвратить сериализацию определенного поля. Посмотрим, как это декларируется,
В приведенном выше фрагменте кода age не будет сериализован, поскольку он объявлен переходным. Принимая во внимание, что имя и возраст, являющиеся нестатическими, будут сериализованы.
В чем разница между сериализацией и десериализацией в Java
Сериализация | Десериализация | |
---|---|---|
Сериализация — это механизм преобразования объекта в поток байтов. | Десериализация помогает преобразовать поток объектов в исходное состояние объекта. | |
Помогает записывать поток байт в файл, БД и т.д. | Помогает читать поток байт из файла, БД и т.д. Класс ObjectOutputStream . | Выполняется с помощью класса ObjectInputStream. |
Заключение
- Сериализация — это процесс преобразования состояния объекта в поток байтов .
- Десериализация обратна сериализации и преобразует поток байтов обратно в исходный объект.
- Класс должен реализовывать интерфейс Serializable, чтобы его можно было сериализовать.
- Классы ObjectOutputStream и ObjectInputStream помогают сериализовать и десериализовать объект соответственно.
- Только нестатических элементов данных сериализуются.
сериализация — Что такое десериализация и сериализация в JSON?
спросил
Изменено 3 месяца назад
Просмотрено 383 тыс. раз
Я видел термины «десериализация» и «сериализация» с JSON. Что они имеют в виду?
- json
- сериализация
- десериализация
- json-десериализация
- json-сериализация
JSON — это формат, который кодирует объекты в строку. Сериализация означает преобразование объекта в эту строку , а десериализация — это обратная ей операция (преобразование строки -> объект) .
При передаче данных или их сохранении в файле данные должны быть строками байтов, но сложные объекты редко имеют такой формат. Сериализация может преобразовывать эти сложные объекты в строки байтов для такого использования. После того, как строки байтов переданы, получатель должен будет восстановить исходный объект из строки байтов. Это известно как десериализация.
Скажем, у вас есть объект:
{foo: [1, 4, 7, 10], bar: "баз"}
сериализация в JSON преобразует его в строку:
'{"foo":[1,4,7,10],"bar":"baz"}'
, который можно сохранить или отправить по проводу куда угодно. Затем получатель может десериализовать эту строку, чтобы вернуть исходный объект. {foo: [1, 4, 7, 10], bar: "баз"}
.
В контексте хранения данных, сериализация (или сериализация) — это процесс перевода структур данных или состояния объекта в формат, который можно сохранить (например, в файле или буфере памяти) или передать (например, по каналу сетевого соединения) и восстановить позже . […]
Противоположная операция, извлечение структуры данных из последовательности байтов, десериализация .
– wikipedia.org
JSON (обозначение объектов JavaScript) — это открытый стандартный формат файла и формат обмена данными, в котором используется удобочитаемый текст для хранения и передачи объектов данных, состоящих из пар атрибут-значение и массивов (или других сериализуемых значений). Это общий формат данных с разнообразным использованием в электронном обмене данными, в том числе в веб-приложениях с серверами.
JSON — это формат данных, не зависящий от языка. Он был получен из JavaScript, но многие современные языки программирования включают код для генерации и анализа данных в формате JSON. Имена файлов JSON используют расширение .json.
– wikipedia.org
В Python сериализация не делает ничего, кроме преобразования заданной структуры данных в ее допустимую подвеску JSON (например, Python True
будет преобразован в JSON true
, а сам словарь будет преобразован в строку) и наоборот для десериализация .
Python и JSON
Вы можете легко заметить разницу между представлениями Python и JSON при параллельном сравнении. Например, изучив их логические значения. Посмотрите в следующей таблице основные типы, используемые в обоих контекстах:
Python | JSON |
---|---|
Правда | правда |
Ложь | ложный |
Нет | ноль |
целое число , число с плавающей запятой | номер |
str (с одинарными ' , двойными ' и тройными """ кавычками) | строка (только двойные " кавычки) |
дикт | объект |
список , кортеж | массив |
Пример кода
Встроенный модуль Python json
— это стандартный способ сериализации и десериализации:
import json данные = { 'президент': { "name": """Г-н Президенте""", "мужчина": Верно, 'возраст': 60, «жена»: нет, «автомобили»: («БМВ», «Ауди») } } # сериализовать json_data = json. dumps (данные, отступ = 2) печать (json_data) # { # "президент": { # "name": "Господин Президенте", # "мужской": правда, # "возраст": 60, # "жена": ноль, # "легковые автомобили": [ # "BMW", # "Ауди" # ] # } # } # десериализовать restore_data = json.loads(json_data) # десериализовать
Источники: realpython.com, geeksforgeeks.org
2Объяснение сериализации и десериализации с использованием Python
В Python для сериализации используется модуль pickle . Итак, процесс сериализации называется pickling в Python. Этот модуль доступен в стандартной библиотеке Python .
Сериализация с использованием pickle
импортный pickle #объект для сериализации example_dic={1:"6",2:"2",3:"f"} #где заканчиваются байты после сериализации, wb обозначает байт записи pickle_out = открыть («dict.pickle», «wb») #Время сбрасывать pickle.dump(example_dic,pickle_out) #что бы вы ни открыли, вы должны закрыть pickle_out. close()
Файл PICKLE (можно открыть в текстовом редакторе, например в блокноте) содержит (сериализованные данные):
€}q (KX 6qKX 2qKX fqu.
Десериализация с использованием pickle
import pickle pickle_in = открыть ("dict.pickle", "rb") get_deserialized_data_back=pickle.load(pickle_in) печать (get_deserialized_data_back)
Вывод:
{1: ‘6’, 2: ‘2’, 3: ‘f’}
2Поделитесь тем, что я узнал по этой теме.
Что такое сериализация
Сериализация
— это процесс преобразования объекта данных в поток байтов
.
Что такое поток байтов
Поток байтов
— это просто поток двоичных данных. Потому что только двоичные данные могут храниться или передаваться.
Что такое байтовая строка и байтовый поток
Иногда вы видите, что люди также используют слово байтовая строка
.