Optimizely will be sunsetting Full Stack Experimentation on July 29, 2024. See the recommended Feature Experimentation migration timeline and documentation.

Dev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket


This topic describes how to set up a custom User Profile Service or how to use the default for the Optimizely Android SDK.

Since statically typed languages lack native support for JSON, the Android SDK uses the OptimizelyJSON object to retrieve JSON in a flexible way. The Get All Feature Variables and Get Feature Variable JSON methods use OptimizelyJSON to return feature variables. For more information, see GetAllFeatureVariables and GetFeatureVariable.


SDK v3.6 and higher


You can access JSON representations with the following methods:

toStringnoneReturns a string representation of the JSON object
toMapnoneReturns a map representation of the JSON object: (Map<String,Object>)
getValueString jsonKey, Class<T> clazzReturns a specified schema object (T) with the key/value pair of the JSON key you pass to this method.

If JSON key is null or empty, it populates your schema object with all JSON key/value pairs.

You can retrieve information for a nested member of the JSON data structure by using flattened JSON dot notation.
For example, if you want to access the key nestedField in {field1: {nestedField: "blah"}}, you can call getValue with the parameter "field1.nestedField2".

The OptimizelyJSON object is defined as follows:

public class OptimizelyJSON {
    public String toString();
    public Map<String,Object> toMap();
    public <T> T getValue(@Nullable String jsonKey, Class<T> clazz) throws JsonParseException


You can easily use the OptimizelyJSON object, for example to:

  • Get a JSON string by calling the toString method, or
  • Retrieve a specified schema from the OptimizelyJSON object by calling the getValue method.

The following example shows how to use an OptimizelyJSON object to populate a schema object you declare.

//declare a schema object into which you want to unmarshal OptimizelyJson content:
public static class SSub {
	public string field
public static class SObj {
	public int field1 
	public double field2
	public string field3
	public SSub field4 

//parse all json key/value pairs into your schema, sObj
SObj robj = optlyJSON.getValue(null, SObj.class);

//or, parse the specified key/value pair with an integer value 
Integer rint = optlyJSON.getValue("field1", Integer.class) 

//or, parse the specified key/value pair with a string value
var strValue string
SSub rsub = optlyJSON.getValue("field4.field", SSub.class)