我需要创建手动json以将其作为输入发送到REST API。过去在12c(v12.0.1.2)中,我使用的是APEX_JSON API,经过研究后发现Oracle 18c具有
我无法使用SQL / PL_SQL函数,因为我需要创建手动json。因此,有人可以建议APEX_JSON更好的地方,还是在性能和解析方面具有JSON_OBJECT_T
,JSON_ARRAY_T
,etc
的新API更好?
这是我需要创建的示例JSON。在此JSON中,只能从数据库访问routeStops
数组,并且该数组将基于记录数而有多个停靠点,但除此之外,其他值在整个json中是单个的,并且需要是硬编码的值吗?所以,现在请提出我可以使用SQL函数来实现这一目标吗?
"routeProfile": {
"resourceProfileRef": "7T5FRANBSC",
"driverRef": "",
"vehicleRef": "",
"dutyStartTime": "10:30",
"dutyDurationHours": 0,
"startLocation": {
"knownLocationRef": "",
"houseName": "",
"address1": "",
"address2": "",
"address3": "",
"address4": "",
"postCode": "",
"countryCode": "",
"location": {
"coordinates": [-999,
-999],
"type": "Point"
}
},
"mandatoryFirstStop": false,
"mandatoryFirstStopLocation": {
"knownLocationRef": "",
"houseName": "",
"address1": "",
"address2": "",
"address3": "",
"address4": "",
"postCode": "",
"countryCode": "",
"location": {
"coordinates": [-999,
-999],
"type": "Point"
}
},
"mandatoryFirstStopTime": 0,
"mandatoryLastStop": false,
"mandatoryLastStopLocation": {
"knownLocationRef": "",
"houseName": "",
"address1": "",
"address2": "",
"address3": "",
"address4": "",
"postCode": "",
"countryCode": "",
"location": {
"coordinates": [-999,
-999],
"type": "Point"
}
},
"mandatoryLastStopTime": 0,
"endLocation": {
"knownLocationRef": "",
"houseName": "",
"address1": "",
"address2": "",
"address3": "",
"address4": "",
"postCode": "",
"countryCode": "",
"countryCode": "",
"location": {
"coordinates": [-999,
-999],
"type": "Point"
}
}
},
"routeStops": [{
"stop": 1,
"location": {
"knownLocationRef": "",
"houseNumber": "",
"houseName": "Shop XYZ",
"address1": "Ruddington Lane",
"address2": "Wilford",
"address3": "Nottingham",
"address4": "",
"postCode": "NG11 7DQ",
"countryCode": "GB",
"location": {
"coordinates": [-999,
-999],
"type": "Point"
}
},
"jobs": [{
"jobRef": "3735081",
"jobTypeRef": "STDSTOPJOB",
"customer": {
"title": "",
"initials": "",
"firstName": "",
"lastName": "",
"homePhone": "",
"workPhone": "",
"mobilePhone": "",
"email": ""
},
"location": {
"knownLocationRef": "",
"houseNumber": "",
"houseName": "Shop XYZ",
"address1": "Ruddington Lane",
"address2": "Wilford",
"address3": "Nottingham",
"address4": "",
"postCode": "NG11 7DQ",
"countryCode": "GB",
"location": {
"coordinates": [-999,
-999],
"type": "Point"
}
},
"customerAccountRef": "CUSTACC001",
"jobScheduling": {
"schedulingDateTimeEarliest": "2018-12-21 00:00",
"schedulingDateTimeLatest": "2018-12-21 23:59",
"excludeDateTimeEarliest": "2018-12-21 12:00",
"excludeDateTimeLatest": "2018-12-21 13:00"
}
}]
}]
答案 0 :(得分:0)
如果要使用SQL selects获取数据,则可以使用12.2中添加的JSON生成函数。这些是:
例如,以下代码使用标准的HR模式按部门创建一组雇员对象:
select json_object (
'department' value d.department_name,
'employees' value json_arrayagg (
json_object (
'name' value first_name || ', ' || last_name,
'job' value job_title
))) DOC
from hr.departments d, hr.employees e, hr.jobs j
where d.department_id = e.department_id
and e.job_id = j.job_id
and d.department_id = 110
group by d.department_name;
DOC
{
"department" : "Accounting",
"employees" :
[
{
"name" : "Shelley, Higgins",
"job" : "Accounting Manager"
},
{
"name" : "William, Gietz",
"job" : "Public Accountant"
}
]
}
中找到更多相关信息