No Oracle Database, o
JSON_OBJECT()
A função cria um objeto JSON de uma sequência de pares chave-valor ou uma instância de tipo de objeto. Sintaxe
A sintaxe fica assim:
JSON_OBJECT
( [ [ KEY ] key_expr VALUE val_expr [ FORMAT JSON ]
,]...
[ JSON_on_null_clause ] [ JSON_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_OBJECT(KEY 'score' VALUE 37) FROM DUAL;
Resultado:
{"score":37}
A
KEY
parte é opcional, então o seguinte obtém o mesmo resultado:SELECT JSON_OBJECT('score' VALUE 37) FROM DUAL;
Resultado:
{"score":37}
Vários pares de chave/valor
Aqui está um exemplo com vários pares de chave/valor:
SELECT JSON_OBJECT(
KEY 'fname' VALUE 'Homer',
KEY 'lname' VALUE 'Escobar',
KEY 'score' VALUE 237
)
FROM DUAL;
Resultado:
{"fname":"Homer","lname":"Escobar","score":237}
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_OBJECT(
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_OBJECT(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Resultado:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
Exemplo de banco de dados
Suponha que executemos a seguinte consulta:
SELECT *
FROM regions;
Resultado:
REGION_ID REGION_NAME ____________ _________________________ 1 Europe 2 Americas 3 Asia 4 Middle East and Africa
Aqui está a mesma consulta, mas com as colunas selecionadas passadas para o
JSON_OBJECT()
função:SELECT JSON_OBJECT(*)
FROM regions;
Resultado:
{"REGION_ID":1,"REGION_NAME":"Europe"} {"REGION_ID":2,"REGION_NAME":"Americas"} {"REGION_ID":3,"REGION_NAME":"Asia"} {"REGION_ID":4,"REGION_NAME":"Middle East and Africa"}
E aqui está com apenas uma coluna passada para a função:
SELECT JSON_OBJECT(region_name)
FROM regions;
Resultado:
{"region_name":"Europe"} {"region_name":"Americas"} {"region_name":"Asia"} {"region_name":"Middle East and Africa"}
Consulte a documentação da Oracle para obter uma explicação mais detalhada desta função.