public Contact contact(ObjectNode node, String location, ParseResult result) {
    if (node == null) return null;

    Contact contact = new Contact();

    String value = getString("name", node, false, location + ".name", result);
    contact.name(value);

    value = getString("url", node, false, location + ".url", result);
    contact.url(value);

    value = getString("email", node, false, location + ".email", result);
    contact.email(value);

    // extra keys
    Set<String> keys = getKeys(node);
    for (String key : keys) {
      if (!CONTACT_KEYS.contains(key)) {
        result.extra(location + ".contact", key, node.get(key));
      }
    }

    return contact;
  }