in ingestion-beam/src/main/java/com/mozilla/telemetry/decoder/ParsePayload.java [454:480]
private static void jsonMove(ObjectNode json, ObjectNode subsetJson, ObjectSchema subsetSchema,
boolean isRoot) {
if (isRoot) {
for (String propertyName : additionalMetadataFields) {
if (json.has(propertyName)) {
subsetJson.set(propertyName, json.get(propertyName));
}
}
}
// for now only support moving explicitly defined properties, with no additional properties
subsetSchema.getPropertySchemas().forEach((propertyName, propertySchema) -> {
if (json.has(propertyName)) {
if (propertySchema instanceof ObjectSchema) {
if (json.path(propertyName).isObject()) {
ObjectNode obj = Json.createObjectNode();
subsetJson.set(propertyName, obj);
jsonMove((ObjectNode) json.path(propertyName), obj, (ObjectSchema) propertySchema,
false);
}
} else if (!isRoot || !additionalMetadataFields.contains(propertyName)) {
// don't remove additionalMetadataFields from json.
// only support recursing into object schemas.
subsetJson.set(propertyName, json.remove(propertyName));
}
}
});
}