我仍在寻找将日期转换为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;
}
因此,在下一步中,我可以使用遍历结构数组foreach
,并使用字符串填充创建正确的json,例如:
string tagsList = `"` ~ data.name ~ `":` ~ to!string(data.value) ~ `,`;
write(tagsList);
结果将是这样的:
"ww":1,"ee":2,"rr":3,"tt":4,
但是它看起来很脏,我需要在末尾切逗号。
我在Google上搜索并发现了几个类似的模块painlessjson
,这些模块允许我将结构序列化为json,但是它以不同的方式工作。它已在结构中使用元素的名称,并且我得到类似以下内容的信息:{"name":"ww","value":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}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句