IT정보사전

[PostgreSQL]테이블 Data를 JSON타입으로 만들기 본문

DataBase

[PostgreSQL]테이블 Data를 JSON타입으로 만들기

작은나무0530 2018. 12. 24. 11:05
728x90
반응형

안녕하세요~작은나무입니다!!
오늘은 API방식으로 보내거나 받을경우 JSON Data를 만들어야 하는대요~
PostgreSQL에서 Table Data를 json Data를 만들 수 있더라구요~ 재미있고 신기하네요 ㅎㅎ 한번 알아볼게요~

   CREATE TABLE test (id text, name character varying(20), age int)
   INSERT INTO test VALUES ('test1', '임꺽정', 10)
   INSERT INTO test VALUES ('test2', '신사임당', 20)
   INSERT INTO test VALUES ('test3', '홍길동', 30)

   CREATE TABLE addr_array (id text, addr character varying(100) , zipcode character varying(6))
   INSERT INTO addr_array VALUES ('test1', '서울시', '11111')
   INSERT INTO addr_array VALUES ('test2', '경기도', '22222')
   INSERT INTO addr_array VALUES ('test3', '부산시', '33333')

   CREATE TABLE info_array (id text, size character varying(100))
   INSERT INTO info_array VALUES ('test1', '170')
   INSERT INTO info_array VALUES ('test2', '185')
※ PostgreSQL의 버전에 따라 지원하지 않는 기능도 있습니다.

[행 단위 JSON 만들기]
방법1 : SELECT json_build_object('id', id, 'name', name, 'age', age) FROM test;
방법2 : SELECT to_json(tmp) FROM (SELECT id, name, age) FROM test) as tmp;
방법3 : SELECT row_to_json(tmp) FROM (SELECT id, name, age) FROM test) as tmp;

[결과]
{"id" : "test1", "name" : "임꺽정", "age" : "10"}
{"id" : "test2", "name" : "신사임당", "age" : "20"}
{"id" : "test3", "name" : "홍길동", "age" : "30"}

[행 단위 JSON에 Array JSON 만들기]
SELECT row_to_json(tmp)
    FROM (
        SELECT id, name, age,
                    json_agg(json_build_object(
                                    'addr', addr,
                                    'zipcode', zipcode
                    )) as addr_list 
        FROM 
test as TBL1 INNER JOIN addr_array as TBL2 ON TBL1.id = TBL2.id
    ) tmp

[다중 행 Data를 JSON Data 만들기]
SELECT array_to_json(array(
    SELECT row_to_json(tmp)
    FROM (
        SELECT id, name, age FROM test
    ) tmp
));

[결과]
[
    {"id" : "test1", "name" : "임꺽정", "age" : "10"},
    {"id" : "test2", "name" : "신사임당", "age" : "20"},
    {"id" : "test3", "name" : "홍길동", "age" : "30"}
]

이 외에도 많은 기능이 있습니다. JSON으로 Data를 전송할 일이 있었는대~ Query한번에 해결했네요~ ㅎㅎ

728x90
반응형
그리드형
Comments