sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgresql, hent værdi for specifik nøgle fra json-array

I Postgres 9.4+ brug funktionen jsonb_array_elements() i en sidesammenføjning:

select (elem->>'skillLevel')::int as skill_level
from my_table
cross join jsonb_array_elements(json_col) elem
where elem->>'skillId' = '1';

Du kan implementere ideen i en simpel funktion, f.eks.:

create or replace function extract_skill_level(json_data jsonb, id int)
returns integer language sql as $$
    select (elem->>'skillLevel')::int
    from jsonb_array_elements(json_data) elem
    where elem->>'skillId' = id::text
$$;

select extract_skill_level(json_col, 1) as skill_level
from my_table;

I Postgres 12+ du har et godt alternativ i form af jsonb-stifunktioner:

select (
    jsonb_path_query(
        json_col, 
        '$[*] ? (@.skillId == "1")'
        )->'skillLevel'
    )::int as skill_level
from my_table;

Db<>Fiddle.

Læs mere om JSON-funktioner og -operatører.




  1. Foreslået måde at køre flere sql-sætninger i python?

  2. Hvordan genererer man en hash af resultatsættet i Postgress?

  3. java.lang.NoSuchFieldError:NONE i dvale med Spring 3, maven, JPA, c3p0

  4. Hvordan kan jeg få de unikke karakterer fra en streng i Oracle?