【发布时间】:2020-08-04 23:43:30
【问题描述】:
我正在创建一个具有多个层的 JSON_OBJECT,如果没有匹配的数据,则不应创建 JSON_OBJECT。在示例中,我将展示如何在没有数据的情况下通过跳过一个级别来创建它,但我希望有一种更好、更简单的方法来做到这一点,因为我无法通过这种方式来处理当前的问题。此 JSON 的结束位置无法处理 null JSON_OBJECTS,因此他们希望将它们从文件中排除。
如您所见,其中一个条件没有匹配的操作。 这就是我当前创建 JSON 的方式,它不会根据需要删除额外的 JSON_OBJECT,但确实显示了我如何在需要外语时创建一个级别。
With
-- Create All of the (actions)
fAction1 as (
Select CONCCD, CONDID,
Case when PADSecLangCode = '' then
json_object(
'actionID' : trim(ACTID),
'actionDescription' : trim(DESC),
'active' : ACTIVE)
Else
json_object(
'actionID' : trim(ACTID),
'actionDescription' : trim(DESC),
'active' : ACTIVE,
'recordTexts' : json_object(
'recordText' : json_array( json_object(
'languageID' : trim(PADSecLangCode),
'actionDescription' : trim(DESCF),
'active' : ACTIVE ))) )
End
as sAction1
From PADWCA)
-- Create All of the Conditions (conditions/actions)
, fCondition1 as (
Select CONCCD,
Case when PADSecLangCode = '' then
json_object(
'conditionID' : trim(CONDID),
'conditionDescription' : trim(DESC),
'active' : ACTIVE,
'actions' : json_object(
'action' : json_array(
(Select sAction1
From fAction1 a
Where a.CONCCD = c.CONCCD and a.CONDID = c.CONDID
) format json
) format json
) format json )
Else
json_object(
'conditionID' : trim(CONDID),
'conditionDescription' : trim(DESC),
'active' : ACTIVE,
'recordTexts' : json_object(
'recordText' : json_array( json_object(
'languageID' : trim(PADSecLangCode),
'conditionDescription' : trim(DESCF),
'active' : ACTIVE ))),
'actions' : json_object(
'action' : json_array(
(Select sAction1
From fAction1 a
Where a.CONCCD = c.CONCCD and a.CONDID = c.CONDID
) format json
) format json
) format json )
End
as sCondition1
From PADWCC c)
-- 在条件/动作周围创建一个包装器 , fCondition2 为 (选择 json_object( '条件': json_arrayagg( sCondition1 格式 json)) 作为 sCondition2 来自 fCondition1)
-- 创建最终结果
选择 json_object(
'条件' : sCondition2 格式 json)
来自 fCondition2;
这是我目前得到的结果:
{
"conditions": {
"condition": [
{
"conditionID": "038-00068-C32",
"conditionDescription": "Exclusion service repairs were made to the following areas:",
"active": "false",
"recordTexts": {
"recordText": [
{
"languageID": "FR",
"conditionDescription": "Service de réparations d'exclusion ont été faites aux domaines suivants:",
"active": "false"
}
]
},
"actions": {
"action": []
}
},
{
"conditionID": "020-00050-C26",
"conditionDescription": "The area was very clean and in excellent condition!",
"active": "false",
"recordTexts": {
"recordText": [
{
"languageID": "FR",
"conditionDescription": "La zone était très propre et en excellent état!",
"active": "false"
}
]
},
"actions": {
"action": [
{
"actionID": "001-051-C26",
"actionDescription": "Please thank everyone who cleaned the area!",
"active": "false",
"recordTexts": {
"recordText": [
{
"languageID": "FR",
"actionDescription": "'il vous plaît remercier tous ceux qui nettoyé la zone!",
"active": "false"
}
]
}
}
]
}
}
]
}
}
这是我想要得到的结果:
{
"conditions": {
"condition": [
{
"conditionID": "038-00068-C32",
"conditionDescription": "Exclusion service repairs were made to the following areas:",
"active": "false",
"recordTexts": {
"recordText": [
{
"languageID": "FR",
"conditionDescription": "Service de réparations d'exclusion ont été faites aux domaines suivants:",
"active": "false"
}
]
},
},
{
"conditionID": "020-00050-C26",
"conditionDescription": "The area was very clean and in excellent condition!",
"active": "false",
"recordTexts": {
"recordText": [
{
"languageID": "FR",
"conditionDescription": "La zone était très propre et en excellent état!",
"active": "false"
}
]
},
"actions": {
"action": [
{
"actionID": "001-051-C26",
"actionDescription": "Please thank everyone who cleaned the area!",
"active": "false",
"recordTexts": {
"recordText": [
{
"languageID": "FR",
"actionDescription": "'il vous plaît remercier tous ceux qui nettoyé la zone!",
"active": "false"
}
]
}
}
]
}
}
]
}
}
【问题讨论】: