Parsing jsonb objects in Postgres

Check out this link for the official postgres json functions and operators

9.16. JSON Functions and Operators

CREATE TABLE emp (  
  emp_id int NOT NULL,
  data jsonb
);

INSERT INTO emp VALUES 
(1, '{"name": "John", "hobbies": ["Movies", "Football", "Hiking"]}');  

INSERT INTO emp VALUES 
(2, '{"name": "Marc", "hobbies": ["Gaming", "Movies", "Music"]}');

SELECT * FROM emp;

Untitled

select data -> 'name' as name from emp;

Untitled

select
	*
from emp
where data->'name'='"Marc"'

Untitled

select
  data->'hobbies' as hobbies
from emp;

Untitled

select
  jsonb_array_elements_text(data->'hobbies') AS hobbies
from emp;

Untitled

select
  distinct(jsonb_array_elements_text(data->'hobbies')) AS distinct_hobbies
from emp;

Untitled

select
  emp_id,
  jsonb_array_elements_text(data->'hobbies') AS hobbies
from emp;

Untitled

select
  emp_id,
  data
from emp
where data->'hobbies'@>'["Gaming"]'::jsonb;

Untitled

Pivoting in Postgres

CREATE OR REPLACE FUNCTION sq.dev.unnest(anyarray)
  RETURNS SETOF anyelement AS
$BODY$
SELECT $1[i]
FROM   generate_series(array_lower($1,1), array_upper($1,1)) i
$BODY$
  LANGUAGE sql IMMUTABLE;

SELECT
   unnest(array['column_1','column_2']) AS metric,
   unnest(array[column_1,column_2]) AS metric_value
FROM sq.dev.test
ORDER BY metric;