www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to convert array of structs to JSON

reply mark <mrmarkkoenig gmail.com> writes:
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.
Jun 24 2019
next sibling parent Marco de Wild <mdwild sogyo.nl> writes:
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);
Jun 24 2019
prev sibling parent zoujiaqing <zoujiaqing gmail.com> writes:
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.
use hunt library: https://github.com/huntlabs/hunt Sample code: import hunt.serialize; void main() { auto json = toJson(pepole); }
Jun 25 2019