Struct JSON serializer/deserializer http://deavmi.assigned.network/projects/jstruct
Go to file
Tristan B. Velloza Kildaire d99bfbaf35 Fix 2023-06-28 16:59:22 +02:00
.github/workflows Create d.yml 2023-03-25 22:46:06 +02:00
branding Added branding 2023-01-09 10:33:01 +02:00
source/jstruct Fix 2023-06-28 16:59:22 +02:00
.gitignore Updated .gitignore 2023-01-09 10:33:14 +02:00
LICENSE Added license file 2023-01-09 10:34:49 +02:00
README.md - Updated example 2023-06-28 16:54:15 +02:00
dub.json Initial commit 2023-01-09 10:32:53 +02:00

README.md

jstruct

Struct JSON serializer/deserializer


D DUB DUB DUB

Usage

Serialization

Below we define a struct called Person:

struct Person
{
    public string firstname, lastname;
    public int age;
    public string[] list;
    public JSONValue extraJSON;
    public EnumType eType;
}

Our enum is defined as:

enum EnumType
{
	DOG,
	CAT
}

Let's create a instance and set some values before we continue:

Person p1;
p1.firstname  = "Tristan";
p1.lastname = "Kildaire";
p1.age = 23;
p1.list = ["1", "2", "3"];
p1.extraJSON = parseJSON(`{"item":1, "items":[1,2,3]}`);
p1.eType = EnumType.CAT;

Now, we make a call to serializeRecord as follows:

JSONValue serialized = serializeRecord(p1);

This returns the following JSON:

{
    "age": 23,
    "eType": "CAT",
    "extraJSON": {
        "item": 1,
        "items": [
            1,
            2,
            3
        ]
    },
    "firstname": "Tristan",
    "lastname": "Kildaire",
    "list": [
        "1",
        "2",
        "3"
    ]
}

Deserialization

Deserialization works by having your predefined struct type and then looking up those field names in the provided JSON. Therefore for this we will be using the following struct type:

struct Person
{
    public string firstname, lastname;
    public int age;
    public bool isMale;
    public JSONValue obj;
    public int[] list;
    public bool[] list2;
    public float[] list3;
    public double[] list4;
    public string[] list5;
    public EnumType animal;
}

Now, let's say we were given the following JSON:

{
    "firstname" : "Tristan",
    "lastname": "Kildaire",
    "age": 23,
    "obj" : {"bruh":1},
    "isMale": true,
    "list": [1,2,3],
    "list2": [true, false],
    "list3": [1.5, 1.4],
    "list4": [1.5, 1.4],
    "list5": ["baba", "booey"],
    "animal": "CAT"
}

We can then deserialize the JSON to our type Person, with the fromJSON method:

// Define our JSON
JSONValue json = parseJSON(`{
"firstname" : "Tristan",
"lastname": "Kildaire",
"age": 23,
"obj" : {"bruh":1},
"isMale": true,
"list": [1,2,3],
"list2": [true, false],
"list3": [1.5, 1.4],
"list4": [1.5, 1.4],
"list5": ["baba", "booey"],
"animal": "CAT"
}
`);

// Deserialize
Person person = fromJSON!(Person)(json);

And we can confirm this with:

writeln(person):

Which will output:

Person("Tristan", "Kildaire", 23, true, {"bruh":1}, [1, 2, 3], [true, false], [1.5, 1.4], [1.5, 1.4], ["baba", "booey"], CAT)

Installing

In order to use jstruct in your project simply run:

dub add jstruct

And then in your D program import as follows:

import jstruct;