Совет по использованию OPEN JSON для анализа вложенного массива - PullRequest
1 голос
/ 14 июля 2020

Я надеюсь, что кто-то может помочь мне указать в правильном направлении, поскольку я пытаюсь разобрать файл json на sql, используя OPEN JSON. У меня есть структура, которая выглядит так:

DECLARE @json AS NVARCHAR(MAX) = '

[{
        "id": "78",
        "Version": {
            "Value": "12"
        },

        "Names": [{
                "NameId": {
                    "Value": "8516365"
                },
                "id": "328787",
                "NameLinkType": {
                    "Value": "A"

                    "CommsChains": {
                        "Value": [[{
                                    "com_primary": {
                                        "Value": "Y"
                                    },
                                    "com_recd": {
                                        "Value": "2020-07-07 00:00:00.000"
                                    },
                                    "com_ack": {
                                        "Value": "2020-07-09 00:00:00.000"

                                    },
                                }
                            ]]
                ),  },
            },
                    
        ],
        
    }
]'

Я могу правильно проанализировать большую часть JSON, поэтому для каждого идентификатора я могу возвращать такие значения, как Version или NameId. Однако я не могу вернуть даты в отношении com_recd или com_ack, которые находятся в CommsChains [Object] - Value [Array] - [0] [Array]

введите описание изображения здесь

1 Ответ

1 голос
/ 14 июля 2020

Похоже, в вашем JSON есть синтаксические ошибки c. После их исправления я смог попытаться найти пути JSON к выражениям даты для значений даты. Это SQL:

DECLARE @json AS NVARCHAR(MAX) = '
[{
        "id": "78",
        "Version": {
            "Value": "12"
        },

        "Names": [{
                "NameId": {
                    "Value": "8516365"
                },
                "id": "328787",
                "NameLinkType": {
                    "Value": "A",

                    "CommsChains": {
                        "Value": [[{
                                    "com_primary": {
                                        "Value": "Y"
                                    },
                                    "com_recd": {
                                        "Value": "2020-07-07 00:00:00.000"
                                    },
                                    "com_ack": {
                                        "Value": "2020-07-09 00:00:00.000"

                                    }
                                }
                            ]]
                    }
                }
            }
                    
        ]
        
    }
]'
select * from openjson(@json, '$[0].Version');--Value 12 1
select * from openjson(@json, '$[0].Names');
select * from openjson(@json, '$[0].Names[0]');
select * from openjson(@json, '$[0].Names[0].NameLinkType');
select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains');
select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value');
select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0]');
select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0][0]');

select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0][0].com_recd'); --selecting path for com_recd
select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0][0].com_ack');  --selecting path for com_ack

Здесь я показываю выбор для различных частей вашего JSON. Содержимое массивов всегда обозначается как [0], поскольку это всегда первый индекс для выбора здесь.

Для получения дополнительной информации о путях JSON на сервере SQL см. здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...