这是我前几天遇到的一个问题,我无法在线找到答案,但能够找到一些基础知识并以此为基础。
我将其发布在这里,希望它对具有类似问题的其他任何人有用,因为这是我非常喜欢学习的一段代码。
背景:
我们从JSON格式的下游系统接收数据,然后使用SSIS将这些数据作为3列插入到SQL Server实例中:
JSONSTRING NVARCHAR(MAX)
IS_VALID_JSON INT
RECORD_IDENTIFIER Computed NVARCHAR(4000)
我们正在创建解析JSON数据的视图以创建Landing视图,以实现数据的进一步转换和询问。
问题:
在解析数据的过程中,我拥有嵌套数组的实例,如下所示,其中规则数据作为数组存储在另一个数组中:
{
"system": {
"interchange": {
"received_date": "2018-05-01",
"schema_version": "ABC123"
},
"record": {
"identifier": "1525165200000999999",
"version": "20180716220047900"
},
"clinical": {
"procedures": {
"read": [
{
"code": "7516C",
"code_cleansed": {
"value": "7516C",
"was_changed": true,
"rules": [
{
"rule": "7357"
},
{
"rule": "TEST"
}
]
},
"code_3": "751"
}
]
}
}
}
}
因此,在我看来,我需要访问read []和rules []数组。
答案 0 :(得分:0)
我正在尝试MS提供的基本代码示例,这是我完成这项工作的结果:
SELECT
JSON3.[RECORD_IDENTIFIER]
,[EMERGENCY CARE PROCEDURE (SNOMED CT)]
,[PRIORITY TYPE CODE]
,[PROCEDURE_CODE_WAS_CHANGED]
,JSON_VALUE (JSON3.[RULES_ARRAY], '$.rule') AS [PROCEDURE_CODE_WAS_CHANGED_RULE]
,[PROCEDURE_CODE_FIRST_3_CHAR]
,[PROCEDURES_CODE_FIRST_4_CHAR]
,[PROCEDURE DATE]
FROM
(
SELECT
[RECORD_IDENTIFIER]
,JSON_VALUE ([PROCEDURES_ARRAY], '$.code') AS [EMERGENCY CARE PROCEDURE (SNOMED CT)]
,JSON_VALUE ([PROCEDURES_ARRAY], '$.code_cleansed.value') AS [PRIORITY TYPE CODE]
,JSON_VALUE ([PROCEDURES_ARRAY], '$.code_cleansed.was_changed') AS [PROCEDURE_CODE_WAS_CHANGED]
,JSON_VALUE ([PROCEDURES_ARRAY], '$.code_3') AS [PROCEDURE_CODE_FIRST_3_CHAR]
,JSON_VALUE ([PROCEDURES_ARRAY], '$.date') AS [PROCEDURE DATE]
,value AS [RULES_ARRAY]
FROM
(
SELECT
[RECORD_IDENTIFIER],
value AS [PROCEDURES_ARRAY]
FROM
[LND].[OP_JSON_REPORT_LAND]
CROSS APPLY OPENJSON ([JSONSTRING],'$.clinical.procedures.read')
) AS JSON CROSS APPLY OPENJSON ([PROCEDURES_ARRAY], '$.code_cleansed.rules') AS JSON2
) AS JSON3
我希望这对某人有所帮助,感谢您的阅读。