В Oracle Database, JSON_OBJECTAGG()
функцията създава JSON обект от двойка ключ-стойност.
Обикновено ключът на свойството, стойността на свойството или и двете са колони от SQL изрази.
Синтаксис
Синтаксисът е така:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ] [ WITH UNIQUE KEYS ]
)
Къде:
[ KEY ] key_expr VALUE val_expr
определя двойка ключ-стойност на свойството.FORMAT JSON
показва, че входният низ е JSON и следователно няма да бъде в кавички в изхода.JSON_on_null_clause
определя поведението, което да се използва, когатоexpr
се равнява на нула (т.е. или включва нулеви стойности в изхода, или не).JSON_returning_clause
определя типа на връщаната стойност.STRICT
проверява дали изходът на функцията за генериране на JSON е правилен JSON. Ако проверката не успее, се появява синтактична грешка.WITH UNIQUE KEYS
гарантира, че генерираните JSON обекти имат уникални ключове.
Пример
Ето пример, за да демонстрирате как работи:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
Резултат:
{"score":37}
KEY
част не е задължителна, така че следното постига същия резултат:
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
Резултат:
{"score":37}
Вложен JSON
Ако една от стойностите, които предавате, съдържа JSON, можете да използвате FORMAT JSON
аргумент, за да посочите, че съдържа JSON и не трябва да се цитира в изхода.
Пример:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
FORMAT JSON
)
FROM DUAL;
Резултат:
{"details":{"name": "Peter", "score": 64}}
Ето какво се случва, ако премахнем FORMAT JSON
част:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Резултат:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
Пример за база данни
JSON_OBJECTAGG()
функцията обикновено се използва за създаване на JSON документи въз основа на стойностите в колона на база данни.
Да предположим, че изпълняваме следната заявка:
SELECT *
FROM jobs
WHERE min_salary > 9000;
Резултат:
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
Ето пример за това как можем да използваме JSON_OBJECTAGG()
функция за създаване на JSON документ от две от горните колони:
SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary)
FROM jobs
WHERE min_salary > 9000;
Резултат:
{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}
В този случай job_id
колоната е ключът, а min_salary
колона е стойността.
Вижте документацията на Oracle за по-подробно обяснение на тази функция.