copy a JSONValue
Daniel Kozak via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Aug 26 00:46:13 PDT 2016
On Friday, 26 August 2016 at 06:56:06 UTC, Alex wrote:
> Hi everybody,
> I'm little at loss: as documented, a JSONValue is only shallow
> copied:
>
> ...
>
> So the effect that the code of "j" is altered was expected.
>
> The question is: how to make a deep copy of a JSONValue? Is
> there a simple way without copying the source string around?
> Or, would this be the simplest way?
>
> Thanks in advance
> Alex
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);
}
More information about the Digitalmars-d-learn
mailing list