building a simple json tree

Rikki Cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jan 15 04:10:02 PST 2015


On 16/01/2015 12:16 a.m., anonymous wrote:
> what's the right syntax for building a JSON tree ? I try to do like in
> an AA but the program throw because the Key doesn't exist:
>
> ---
> import std.stdio, std.json;
>
> void main(string[] args)
> {
>      struct Foo{
>          string a,  b;
>          void writeToJson(ref JSONValue target) {
>              target["a"] = JSONValue(a);
>              target["b"] = JSONValue(b);
>          }
>      }
>
>      JSONValue root = parseJSON("{}");
>      root["items"] = JSONValue([""]);
>
>      Foo*[] foos;
>      foos ~= new Foo("a1","b1");
>      foos ~= new Foo("a2","b2");
>
>      foreach(foo; foos) {
>          root["items"].array.length += 1;
>          root["items"].array[$-1] = parseJSON("{}");
>          foo.writeToJson(root["items"].array[$-1]);
>      }
> }
> ---

import std.stdio, std.json;

void main(string[] args)
{
     struct Foo{
         string a,  b;
         void writeToJson(ref JSONValue target) {
             target["a"] = JSONValue(a);
             target["b"] = JSONValue(b);
         }
     }

     JSONValue root = ["items": cast(string[])[]];

     Foo[] foos;
     foos ~= Foo("a1","b1");
     foos ~= Foo("a2","b2");

     foreach(foo; foos) {
         root["items"].array ~= JSONValue(foo.a);
		root["items"].array ~= JSONValue(foo.b);
     }
	
	writeln(root.toString());
}

I would recommend keeping away from std.json. Its an old piece of code, 
that needs to be replaced.
Vibe.d has a much nicer implementation that is really decent. I would 
recommend that, if you are up to using the build manager dub.


More information about the Digitalmars-d-learn mailing list