将结构转换为Json的最佳方法是什么?

Dmi*_*kov 2 serialization json d

我仍在寻找将我的约会转换为Json的最佳方式.我需要得到这样的结构:

"tags": { "Python": 1, "Java": 3, "Linux": 8 }

我的第一次尝试是使用关联数组: 如何将关联数组转换为key:value?

但后来我明白这不是最好的变种.所以我决定创建一系列结构.

下一个代码只是创建结构的测试数组并用测试数据填充它:

struct MyData
    {
        string name;
        int value;
    }

    MyData [] mydata;
    string mystr = "qwert";

    foreach (i; 1..5)
    {
        MyData md;
        md.name = to!(string)(mystr[i]) ~ to!(string)(mystr[i]); // just to have double letters like: "qq"
        md.value = i;
        mydata ~= md;
    }
Run Code Online (Sandbox Code Playgroud)

因此,在下一步中,我可以迭代结构数组foreach,并使用字符串连接创建适当的json,如:

    string tagsList = `"` ~ data.name ~ `":` ~ to!string(data.value) ~ `,`;
    write(tagsList);
Run Code Online (Sandbox Code Playgroud)

结果将是:

"ww":1,"ee":2,"rr":3,"tt":4,

但它看起来非常脏,我需要在最后剪切逗号符号.

我用Google搜索并发现了几个类似的模块painlessjson允许我将结构序列化为json,但它的工作方式不同.它在结构中取了元素的名称,我得到的结果如下: {"name":"ww","value":1}

那么我应该用什么语言来获得正确的结果?

Abs*_*ype 5

为您的结构制作自定义序列化例程并不是一个大问题std.json.

import std.stdio;
import std.json;

struct Data
{
    string name;
    int value;
    void serialize(ref JSONValue jv)
    {
        jv[name] = value;
    }
}

void main(string[] args)
{
    Data[] data = [Data("a",1), Data("b",2)];
    JSONValue obj = parseJSON("{}");
    foreach(Data d; data)
        d.serialize(obj);
    writeln(obj.toPrettyString);
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,代码很干净,只需要一个LOC写入.它以您期望的格式打印:

{"a":1,"b":2}