copy a JSONValue

Alex via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Aug 26 01:26:28 PDT 2016


On Friday, 26 August 2016 at 07:46:13 UTC, Daniel Kozak wrote:
> Another way is to implement deepCopy by yourself (something 
> like below)
>
> import std.json;
> import std.stdio;
>
> JSONValue deepCopy(ref JSONValue val)
> {
>     JSONValue newVal;
>     switch(val.type)
>     {
>         case JSON_TYPE.STRING:
>             newVal = JSONValue(val.str.idup);
>             break;
>         case JSON_TYPE.OBJECT:
>             foreach (string key, value; val)
>             {
>                 newVal[key] = value.deepCopy;
>             }
>             break;
>         case JSON_TYPE.ARRAY:
>             foreach (size_t index, value; val)
>             {
>                 newVal[index] = value.deepCopy;
>             }
>             break;
>         default:
>             newVal = val;
>
>     }
>     return newVal;
> }
>
> void main()
> {
>     string s = "{ \"language\": \"D\", \"rating\": 3.14, 
> \"code\": 42 }";
>     JSONValue j = parseJSON(s);
>     writeln("code: ", j["code"].integer);
>
>     auto j2 = j.deepCopy;
>     j2["code"] = 43;
>     writeln("code of j2: ", j2["code"].integer);
>     writeln("code of j: ", j["code"].integer);
> }

Yeah... I thought that i would have to implement something like 
this... And wanted to avoid this...
So, yes, I think this is the more convincing way, but in my case 
the --> toString --> toJson conversion is enough...

Thanks for help :)


More information about the Digitalmars-d-learn mailing list