public static TableIdentifier fromJson(String json) {
    Preconditions.checkArgument(
        json != null, "Cannot parse table identifier from invalid JSON: null");
    Preconditions.checkArgument(
        !json.isEmpty(), "Cannot parse table identifier from invalid JSON: ''");
    return JsonUtil.parse(json, TableIdentifierParser::fromJson);
  }
@Test
  public void testFailParsingWhenNullOrEmptyJson() {
    String nullJson = null;
    assertThatThrownBy(() -> TableIdentifierParser.fromJson(nullJson))
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessage("Cannot parse table identifier from invalid JSON: null");

    String emptyString = "";
    assertThatThrownBy(() -> TableIdentifierParser.fromJson(emptyString))
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessage("Cannot parse table identifier from invalid JSON: ''");

    String emptyJson = "{}";
    assertThatThrownBy(() -> TableIdentifierParser.fromJson(emptyJson))
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessage("Cannot parse missing string: name");

    String emptyJsonArray = "[]";
    assertThatThrownBy(() -> TableIdentifierParser.fromJson(emptyJsonArray))
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessage("Cannot parse missing or non-object table identifier: []");
  }