Hackers, Most of the jsonpath methods auto-unwrap in lax mode:
david=# select jsonb_path_query('[-2,5]', '$.abs()'); jsonb_path_query ------------------ 2 5 (2 rows) The obvious exceptions are size() and type(), which apply directly to arrays, so no need to unwrap: david=# select jsonb_path_query('[-2,5]', '$.size()'); jsonb_path_query ------------------ 2 (1 row) david=# select jsonb_path_query('[-2,5]', '$.type()'); jsonb_path_query ------------------ "array" But what about string()? Is there some reason it doesn’t unwrap? david=# select jsonb_path_query('[-2,5]', '$.string()'); ERROR: jsonpath item method .string() can only be applied to a bool, string, numeric, or datetime value What I expect: david=# select jsonb_path_query('[-2,5]', '$.string()'); jsonb_path_query ————————— "2" "5" (2 rows) However, I do see a test[1] for this behavior, so maybe there’s a reason for it? Best, David [1]: https://github.com/postgres/postgres/blob/REL_17_BETA1/src/test/regress/expected/jsonb_jsonpath.out#L2527-L2530