[`NULLIF`][1], like you already found:

    SELECT NULLIF(raw_record->>'ObjectCount','')::int ...

.. to replace the empty string with NULL. Strictly speaking, your question asks for more:
> Is there a way to fall back to `0` if the cast doesn't work?

A more general solution:

- https://dba.stackexchange.com/questions/204795/how-can-i-manage-an-exception-generated-by-postgis/204808#204808

[`COALESCE`][2] is unrelated to the question. But adapt slightly what you have in your answer to reduce casting back and forth:

    SELECT COALESCE(NULLIF(raw_record->>'ObjectCount','')::int, 0) ...

It should be a bit faster to replace both functions with [`CASE`][3]:

    SELECT CASE WHEN raw_record->>'ObjectCount' <> ''  -- excludes null and ''
                THEN (raw_record->>'ObjectCount')::int
                ELSE 0 END ...

Related:

- [Best way to check for “empty or null value”][4]


  [1]: https://www.postgresql.org/docs/current/static/functions-conditional.html#FUNCTIONS-NULLIF
  [2]: https://www.postgresql.org/docs/current/static/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULL
  [3]: https://www.postgresql.org/docs/current/static/functions-conditional.html#FUNCTIONS-CASE
  [4]: https://stackoverflow.com/questions/23766084/best-way-to-check-for-empty-or-null-value/23767625#23767625