Report a bug
If you spot a problem with this page, click here to create a GitHub issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
a local clone.
mir.ser.json
High level JSON serialization API
- struct
JsonSerializer
(string sep, Appender); - JSON serialization back-end
- Appender*
appender
; - JSON string buffer
- int
serdeTarget
; - Mutable value used to choose format specidied or user-defined serialization specializations
- size_t
stringBegin
(); - void
putStringPart
(scope const(char)[]value
); - Puts string part. The implementation allows to split string unicode points.
- void
stringEnd
(size_t); - size_t
structBegin
(size_tlength
= size_t.max); - void
structEnd
(size_tstate
); - size_t
listBegin
(size_tlength
= size_t.max); - void
listEnd
(size_tstate
); - alias
sexpBegin
= listBegin; - alias
sexpEnd
= listEnd; - auto
annotationsBegin
(); - void
putSymbol
(scope const char[]symbol
); - void
putAnnotation
(scope const(char)[]annotation
); - void
annotationsEnd
(size_tstate
); - alias
annotationWrapperBegin
= structBegin; - alias
annotationWrapperEnd
= structEnd; - void
nextTopLevelValue
(); - void
putCompiletimeKey
(string key)(); - void
putKey
(scope const char[]key
); - void
putValue
(Num)(const Numvalue
)
if (isNumeric!Num && !is(Num == enum)); - void
putValue
(W, WordEndian endian)(BigIntView!(W, endian)view
); - void
putValue
(size_t size)(auto const ref BigInt!sizenum
); - void
putValue
(size_t size)(auto const ref Decimal!sizenum
); - void
putValue
(typeof(null));
voidputNull
(IonTypeCodecode
); - void
putValue
(boolb
); - void
putValue
(scope const char[]value
); - void
putValue
(Clobvalue
); - void
putValue
(Blobvalue
); - void
putValue
(Timestampvalue
); - void
elemBegin
(); - alias
sexpElemBegin
= elemBegin;
- string
serializeJson
(V)(auto ref Vvalue
, intserdeTarget
= SerdeTarget.json); - JSON serialization function.Examples:
struct S { string foo; uint bar; } assert(serializeJson(S("str", 4)) == `{"foo":"str","bar":4}`);
Examples:import mir.serde: serdeIgnoreDefault; static struct Decor { int candles; // 0 float fluff = float.infinity; // inf } static struct Cake { @serdeIgnoreDefault string name = "Chocolate Cake"; int slices = 8; float flavor = 1; @serdeIgnoreDefault Decor dec = Decor(20); // { 20, inf } } assert(Cake("Normal Cake").serializeJson == `{"name":"Normal Cake","slices":8,"flavor":1.0}`); auto cake = Cake.init; cake.dec = Decor.init; assert(cake.serializeJson == `{"slices":8,"flavor":1.0,"dec":{"candles":0,"fluff":"+inf"}}`); assert(cake.dec.serializeJson == `{"candles":0,"fluff":"+inf"}`); static struct A { @serdeIgnoreDefault string str = "Banana"; int i = 1; } assert(A.init.serializeJson == `{"i":1}`); static struct S { @serdeIgnoreDefault A a; } assert(S.init.serializeJson == `{}`); assert(S(A("Berry")).serializeJson == `{"a":{"str":"Berry","i":1}}`); static struct D { S s; } assert(D.init.serializeJson == `{"s":{}}`); assert(D(S(A("Berry"))).serializeJson == `{"s":{"a":{"str":"Berry","i":1}}}`); assert(D(S(A(null, 0))).serializeJson == `{"s":{"a":{"str":"","i":0}}}`); static struct F { D d; } assert(F.init.serializeJson == `{"d":{"s":{}}}`);
Examples:import mir.serde: serdeIgnoreIn; static struct S { @serdeIgnoreIn string s; } // assert(`{"s":"d"}`.deserializeJson!S.s == null, `{"s":"d"}`.deserializeJson!S.s); assert(S("d").serializeJson == `{"s":"d"}`);
Examples:import mir.deser.json; static struct S { @serdeIgnoreOut string s; } assert(`{"s":"d"}`.deserializeJson!S.s == "d"); assert(S("d").serializeJson == `{}`);
Examples:import mir.serde: serdeIgnoreOutIf; static struct S { @serdeIgnoreOutIf!`a < 0` int a; } assert(serializeJson(S(3)) == `{"a":3}`, serializeJson(S(3))); assert(serializeJson(S(-3)) == `{}`);
Examples:import mir.rc.array; auto ar = rcarray!int(1, 2, 4); assert(ar.serializeJson == "[1,2,4]");
Examples:import mir.deser.json; import std.range; import std.algorithm; import std.conv; static struct S { @serdeTransformIn!"a += 2" @serdeTransformOut!(a =>"str".repeat.take(a).joiner("_").to!string) int a; } auto s = deserializeJson!S(`{"a":3}`); assert(s.a == 5); assert(serializeJson(s) == `{"a":"str_str_str_str_str"}`);
- void
serializeJson
(Appender, V)(ref Appenderappender
, auto ref Vvalue
, intserdeTarget
= SerdeTarget.json); - JSON serialization for custom outputt range.Examples:
import mir.format: stringBuf; stringBuf buffer; static struct S { int a; } serializeJson(buffer, S(4)); assert(buffer.data == `{"a":4}`);
- template
serializeJsonPretty
(string sep = "\x09") - JSON serialization function with pretty formatting and custom output range.Examples:
static struct S { int a; } assert(S(4).serializeJsonPretty!" " == "{\n \"a\": 4\n}");
Examples:import mir.format: stringBuf; stringBuf buffer; static struct S { int a; } serializeJsonPretty!" "(buffer, S(4)); assert(buffer.data == "{\n \"a\": 4\n}");
- void
serializeJsonPretty
(Appender, V)(ref Appenderappender
, auto ref Vvalue
, intserdeTarget
= SerdeTarget.json)
if (isOutputRange!(Appender, const(char)[]) && isOutputRange!(Appender, char)); - string
serializeJsonPretty
(V)(auto ref Vvalue
, intserdeTarget
= SerdeTarget.json); - JSON serialization function with pretty formatting.
- template
jsonSerializer
(string sep = "") - Creates JSON serialization back-end. Use sep equal to "\t" or " " for pretty formatting.Examples:
import mir.format: stringBuf; import mir.bignum.integer; stringBuf buffer; auto ser = jsonSerializer((()@trusted=>&buffer)(), 3); auto state0 = ser.structBegin; ser.putKey("null"); ser.putValue(null); ser.putKey("array"); auto state1 = ser.listBegin(); ser.elemBegin; ser.putValue(null); ser.elemBegin; ser.putValue(123); ser.elemBegin; ser.putValue(12300000.123); ser.elemBegin; ser.putValue("\t"); ser.elemBegin; ser.putValue("\r"); ser.elemBegin; ser.putValue("\n"); ser.elemBegin; ser.putValue(BigInt!2(1234567890)); ser.listEnd(state1); ser.structEnd(state0); assert(buffer.data == `{"null":null,"array":[null,123,1.2300000123e+7,"\t","\r","\n",1234567890]}`, buffer.data);
Examples:import std.array; import mir.bignum.integer; auto app = appender!string; auto ser = jsonSerializer!" "(&app); auto state0 = ser.structBegin; ser.putKey("null"); ser.putValue(null); ser.putKey("array"); auto state1 = ser.listBegin(); ser.elemBegin; ser.putValue(null); ser.elemBegin; ser.putValue(123); ser.elemBegin; ser.putValue(12300000.123); ser.elemBegin; ser.putValue("\t"); ser.elemBegin; ser.putValue("\r"); ser.elemBegin; ser.putValue("\n"); ser.elemBegin; ser.putValue(BigInt!2("1234567890")); ser.listEnd(state1); ser.structEnd(state0); assert(app.data == `{ "null": null, "array": [ null, 123, 1.2300000123e+7, "\t", "\r", "\n", 1234567890 ] }`, app.data);
- auto
jsonSerializer
(Appender)(return Appender*appender
, intserdeTarget
= SerdeTarget.json);
Copyright © 2016-2022 by Ilya Yaroshenko | Page generated by
Ddoc on Thu Mar 10 07:43:27 2022