public static ObjectNode normalizeKeys(
      final ObjectNode objectNode, final Predicate<Map.Entry<String, JsonNode>> fieldPredicate) {
    final ObjectNode normalized = JsonUtil.createEmptyObjectNode();
    objectNode
        .fields()
        .forEachRemaining(
            entry -> {
              if (!fieldPredicate.test(entry)) {
                return;
              }

              final String key = entry.getKey();
              final JsonNode value = entry.getValue();
              final String normalizedKey = normalizeKey(key);
              if (value instanceof ObjectNode) {
                normalized.set(normalizedKey, normalizeKeys((ObjectNode) value));
              } else if (value instanceof ArrayNode) {
                normalized.set(normalizedKey, normalizeKeysInArray((ArrayNode) value));
              } else {
                normalized.set(normalizedKey, value);
              }
            });
    return normalized;
  }
Converts all the object keys (but none of the string values) to lowercase for easier lookup.
This is useful in cases such as the 'genesis.json' file where all keys are assumed to be case
insensitive.

@param objectNode The ObjectNode to be normalized
@param fieldPredicate The predicate to filter the fields to normalize
@return a copy of the json object with all keys in lower case.
config/src/main/java/org/hyperledger/besu/config/JsonUtil.java