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

标签 json serialization d

我仍在寻找将日期转换为 Json 的最佳方法。我需要得到这样的结构:

“标签”:{ “ python ”:1、 “ java ”:3, “Linux”:8 }

我的第一次尝试是使用关联数组: How to convert associative array to 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;
    }

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

    string tagsList = `"` ~ data.name ~ `":` ~ to!string(data.value) ~ `,`;
    write(tagsList);

结果将是这样的:

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

但是它看起来非常脏的代码,我需要在末尾删除逗号符号。

我在 google 上搜索并发现了几个模块,例如 painlessjson,它们允许我将结构序列化为 json,但它的工作方式不同。它采用了结构中元素的名称,我得到的信息如下: {"名称":"ww","值":1}

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

最佳答案

使用 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);
}

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

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

关于json - 将结构转换为 Json 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32683727/

相关文章:

java - 是否可以在单个 Rest 服务调用中检索 Image 和 JsonObject?

json - 我可以用 TJSONMarshal 序列化接口(interface)(_recordset)吗?

file-io - 与平台无关的文件锁定?

sockets - D套接字编程基本连接脚本

c# - 是否可以通过 P/Invoke 从 C# 使用 D?

c# - 将平面 JSON 转换为嵌套 JSON

java - 从该网站读取数据的最简单方法?

json - Actionscript 3 Json?

php - 如何在 Symfony Serializer 中反序列化对象数组?

django - 序列化程序 - Django REST Framework - 序列化程序字段可能命名不正确,并且与 `str` 实例上的任何属性或键都不匹配