How to "insert into select from" skipping exceptions
Unfortunately there is no is_json() or similar type check, but you can write your own:

create or replace function is_valid_json(p_text text) 
   returns boolean
as
$$
begin
  if p_text is null then
    return true;
  end if;

  if p_text::json is not null then 
    return true;
  end if;
exception 
  when others then
    return false;
end;
$$
language plpgsql;


Then you could do:

insert into T( id, jblob )
select id, jblob::jsonb 
from S
where is_valid_json(jblob);


Or do the test and cast in one go: 

create or replace function cast_if_possible(p_text text) 
   returns jsonb
as
$$
begin
  return p_text::json;
exception 
  when others then
    return null;
end;
$$
language plpgsql;


and

insert into T( id, jblob )
select id, cast_if_possible(jblob) as jblob
from S;


That would store NULL values for invalid JSON values. If you don't want that you would need to add condition to exclude those.

If you have a substantial number of (invalid) duplicate values in the table, then declaring the function as stable then Postgres can cache the results of the function call, which might improve performance. 



However this is not going to be fast as the exception handler and PL/pgSQL have a substantial performance overhead.