PingDirectory

Synchronizing a non-JSON attribute into a field of a JSON attribute

This scenario provides a reversal of the previous example. The source stores the following information:

mail: jsmith@example.com

but the destination stores the following information:

ubidEmailJSON: {"value" : "jsmith@example.com"}

To construct an attribute value that functions as a JSON object, use JSON attribute mapping and JSON attribute mapping field configuration objects. The following code provides an example:

bin/dsconfig create-attribute-mapping --map-name "Attr Map" \
  --mapping-name ubidEmailJSON \
  --type json

bin/dsconfig create-json-attribute-mapping-field --map-name "Attr Map" \
  --mapping-name ubidEmailJSON \
  --field-name "value" \
  --from-attribute mail

For more information about these configuration object types, see the configuration reference guide.

You can also use a constructed attribute mapping to construct a JSON attribute value as a raw string, as follows:

$ bin/dsconfig create-attribute-mapping \
  --map-name "Attr Map" \
  --mapping-name ubidEmailJSON \
  --type constructed \
  --set 'value-pattern:{{"value" : "{mail:jsonEscape}"}}'

When constructing a value, be aware of the following points:

  • Double curly brackets ({{ }}) are necessary to represent a single curly bracket ({ }) in the output. These brackets are typically used to reference attribute values.

  • Use the :jsonEscape modifier to escape attribute values that appear within a JSON attribute. This step prevents values that include quotes like '"John Smith" <jsmith@example.com>' from producing invalid JSON.

In the following example, a JSON Attribute object must be created because the destination value is likely to be augmented with additional information:

$ bin/dsconfig create-json-attribute \
  --pipe-name "A to B" \
  --class-name Users \
  --attribute-name ubidEmailJSON \
  --set id-field:value \
  --set include-field:value