APEX JSON Deserialize

Boris Bachovski picture Boris Bachovski · Mar 23, 2012 · Viewed 7.2k times · Source

I have JSON string that has nested objects with dynamic names that vary each time. For an instance:

{
    "Objects": {
        "dynamicName1": {
            "name": "test"
        },
        "dynamicName2": {
            "name": "test"
        }
    }
}

I was wondering how can you deserialize this string in APEX using wrapper classes?

I tried this:

public class masterobj
{   public childobj Objects;    
}

public class childobj
{   public el dynamicName1;
    public el dynamicName2;     
}

public class el
{   public string name;
}

String s = '{"Objects":{"dynamicName1":{"name":"test"},"dynamicName2":{"name":"test"}}}';
masterobj mo = (masterobj)JSON.deserialize(s, masterobj.class);

which works well when you have declared the dynamic variable names in the class for each nested object.

The problem and the question is how can I make this work using a dynamic variable in the wrapper class. Because the object names will vary and also the number of the objects, I can't hard-code the names as they are different each time.

Any ideas?

Answer

superfell picture superfell · Mar 23, 2012

You won't be able to deserialize a structure like that with the data binding features of the json parser, you'll need to use the streaming json parser to read it.