How to convert array of structs to JSON
Marco de Wild
mdwild at sogyo.nl
Tue Jun 25 05:50:24 UTC 2019
On Tuesday, 25 June 2019 at 05:33:57 UTC, mark wrote:
> I have the following array of structs:
>
> struct Person {
> string name;
> int age;
> };
>
>
> Person people[];
> Person p;
>
> Person p1 = {
> "Bob",
> 12
> };
>
> Person p2 = {
> "Bob",
> 12
> };
>
> people ~= p1;
> people ~= p2;
>
> I've read through the std.json documentation, but I'm still
> confused as to how to create an array of objects, especially if
> the objects are structs.
>
> I've included this:
>
> JSONValue jj;
> jj["nodes"].array = [];
>
> But I get the error: JSONValue is not an object. Ideally, I'd
> like to have a json output that looks like this:
>
> [
>
> {
> "name": "Bob",
> "age": 12
> },
> {
> "name": "Bob",
> "age": 12
> },
> ]
>
> Any help would be greatly appreciated.
As far as I can tell, there's no "out of the box" support for
serialization in std.json. You can work around that by manually
supplying the serialization:
https://run.dlang.io/is/AZqTJE
struct Person
{
string name;
int age;
JSONValue toJson()
{
return JSONValue(["name": JSONValue(name), "age":
JSONValue(age)]);
}
}
auto json = JSONValue(people.map!(p => p.toJson).array);
writeln(json);
I use the data module from vibe.d, which supports data
serialization:
http://code.dlang.org/packages/vibe-d%3Adata
https://vibed.org/api/vibe.data.json/
struct Person
{
string name;
int age;
}
auto json = people.serializeToJson();
writeln(json);
More information about the Digitalmars-d-learn
mailing list