std/marshal
Источник ИзменитьЭтот модуль содержит процедуры для сериализации и десериализации произвольных структур данных Nim. Формат сериализации использует JSON.
Ограничение: Для объектов их тип не сериализуется. Это означает, что он не будет работать, если у объекта есть тип во время выполнения, отличный от типа во время компиляции.
Основные примеры использования
Пример:
import std/marshal
type
A = object of RootObj
B = object of A
f: int
let a: ref A = new(B)
assert $$a[] == "{}" # not "{f: 0}"
# unmarshal
let c = to[B]("""{"f": 2}""")
assert typeof(c) is B
assert c.f == 2
# marshal
assert $$c == """{"f": 2}"""
Примечание: Операции to и $$ доступны во время компиляции! См. также
Импорты
- streams, typeinfo, json, intsets, tables, unicode
Процедуры
proc `$$`[T](x: sink T): string
-
Возвращает строковое представление
x(сериализация, маппинг).Примечание: для сериализации
xв JSON используйте%xиз модуляjsonилиjsonutils.toJson(x).Пример:
type Foo = object id: int bar: string let x = Foo(id: 1, bar: "baz") ## serialize: let y = $$x assert y == """{"id": 1, "bar": "baz"}"""Источник Изменить proc to[T](data: string): T
- Читает данные и преобразует их в тип
T(десериализация, размаппинг).Пример:
type Foo = object id: int bar: string let y = """{"id": 1, "bar": "baz"}""" assert typeof(y) is string ## deserialize to type 'Foo': let z = y.to[:Foo] assert typeof(z) is Foo assert z.id == 1 assert z.bar == "baz"Источник Изменить
© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/marshal.html