No Oracle Database, o
JSON_OBJECTAGG()
A função cria um objeto JSON de um par chave-valor. Normalmente, a chave da propriedade, o valor da propriedade ou ambos são colunas de expressões SQL.
Sintaxe
A sintaxe fica assim:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ] [ WITH UNIQUE KEYS ]
)
Onde:
[ KEY ] key_expr VALUE val_expr
especifica um par de valores-chave de propriedade.FORMAT JSON
indica que a string de entrada é JSON e, portanto, não será citada na saída.JSON_on_null_clause
especifica o comportamento a ser usado quandoexpr
equivale a nulo (ou seja, inclua valores nulos na saída ou não).JSON_returning_clause
especifica o tipo de valor de retorno.STRICT
verifica se a saída da função de geração JSON é o JSON correto. Se a verificação falhar, um erro de sintaxe será gerado.WITH UNIQUE KEYS
garante que os objetos JSON gerados tenham chaves exclusivas.
Exemplo
Veja um exemplo para demonstrar como funciona:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
Resultado:
{"score":37}
A
KEY
parte é opcional, então o seguinte obtém o mesmo resultado:SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
Resultado:
{"score":37}
JSON aninhado
Se um dos valores passados contiver JSON, você poderá usar o
FORMAT JSON
argumento para especificar que ele contém JSON e não deve ser citado na saída. Exemplo:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
FORMAT JSON
)
FROM DUAL;
Resultado:
{"details":{"name": "Peter", "score": 64}}
Veja o que acontece se removermos o
FORMAT JSON
papel:SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Resultado:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
Exemplo de banco de dados
O
JSON_OBJECTAGG()
A função normalmente é usada para produzir documentos JSON com base nos valores em uma coluna do banco de dados. Suponha que executemos a seguinte consulta:
SELECT *
FROM jobs
WHERE min_salary > 9000;
Resultado:
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY __________ ________________________________ _____________ _____________ AD_PRES President 20000 40000 AD_VP Administration Vice President 15000 30000 SA_MAN Sales Manager 10000 20000
Aqui está um exemplo de como podemos usar o
JSON_OBJECTAGG()
função para produzir um documento JSON de duas das colunas acima:SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary)
FROM jobs
WHERE min_salary > 9000;
Resultado:
{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}
Nesse caso, o
job_id
coluna é a chave, e o min_salary
coluna é o valor. Consulte a documentação da Oracle para obter uma explicação mais detalhada desta função.