I think what you're seeing here is a problem of a small data set. When sampling from a few rows, there's always the chance you'll get nothing.
When loading it with more data on 19c I see:
create table t(x varchar2(40) constraint t_chk
check(x is json)
);
insert into t(x) values('{a:1,b:"Hello",c:"World"}');
insert into t(x) values('{a:5,b:"Hello",c:"World"}');
insert into t(x) values('{a:50,b:"Hello",c:"World"}');
insert into t(x) values('{a:500,b:"Hello",c:"World"}');
insert into t(x) values('{a:5000,b:"Hello",c:"World"}');
insert into t
select * from t;
insert into t
select * from t;
insert into t
select * from t;
commit;
create search index t_idx on t(x)
for json ;
exec dbms_stats.gather_table_stats(user,'T',cascade=>true);
select json_query( dataguide ,'$' pretty )
from user_json_dataguides
where table_name ='T';
JSON_QUERY(DATAGUIDE,'$'PRETTY)
[
{
"o:path" : "$.a",
"type" : "number",
"o:length" : 4,
"o:preferred_column_name" : "X$a",
"o:frequency" : 100,
"o:low_value" : "5",
"o:high_value" : "5",
"o:num_nulls" : 0,
"o:last_analyzed" : "2019-08-22T12:37:49"
},
{
"o:path" : "$.b",
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "X$b",
"o:frequency" : 100,
"o:low_value" : "Hello",
"o:high_value" : "Hello",
"o:num_nulls" : 0,
"o:last_analyzed" : "2019-08-22T12:37:49"
},
{
"o:path" : "$.c",
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "X$c",
"o:frequency" : 100,
"o:low_value" : "World",
"o:high_value" : "World",
"o:num_nulls" : 0,
"o:last_analyzed" : "2019-08-22T12:37:49"
}
]
What happens when you do this?