关于使用openjson解析嵌套数组的建议

voj3qocg  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(386)

我希望有人能帮我指明正确的方向,因为我正在尝试使用openjson将json文件解析为sql。我有一个这样的结构:

  1. DECLARE @json AS NVARCHAR(MAX) = '
  2. [{
  3. "id": "78",
  4. "Version": {
  5. "Value": "12"
  6. },
  7. "Names": [{
  8. "NameId": {
  9. "Value": "8516365"
  10. },
  11. "id": "328787",
  12. "NameLinkType": {
  13. "Value": "A"
  14. "CommsChains": {
  15. "Value": [[{
  16. "com_primary": {
  17. "Value": "Y"
  18. },
  19. "com_recd": {
  20. "Value": "2020-07-07 00:00:00.000"
  21. },
  22. "com_ack": {
  23. "Value": "2020-07-09 00:00:00.000"
  24. },
  25. }
  26. ]]
  27. ), },
  28. },
  29. ],
  30. }
  31. ]'

我能够正确解析大多数json,因此对于每个id,我可以返回如下值 Version 或者 NameId . 但是,我无法返回任何日期有关 com_recd 或者 com_ack ,位于commschains[object]–value[array]–[0][array]下

56lgkhnf

56lgkhnf1#

您的json中似乎有一些语法错误。在修复它们之后,我能够尝试找到日期表达式到日期值的json路径。这是sql:

  1. DECLARE @json AS NVARCHAR(MAX) = '
  2. [{
  3. "id": "78",
  4. "Version": {
  5. "Value": "12"
  6. },
  7. "Names": [{
  8. "NameId": {
  9. "Value": "8516365"
  10. },
  11. "id": "328787",
  12. "NameLinkType": {
  13. "Value": "A",
  14. "CommsChains": {
  15. "Value": [[{
  16. "com_primary": {
  17. "Value": "Y"
  18. },
  19. "com_recd": {
  20. "Value": "2020-07-07 00:00:00.000"
  21. },
  22. "com_ack": {
  23. "Value": "2020-07-09 00:00:00.000"
  24. }
  25. }
  26. ]]
  27. }
  28. }
  29. }
  30. ]
  31. }
  32. ]'
  33. select * from openjson(@json, '$[0].Version');--Value 12 1
  34. select * from openjson(@json, '$[0].Names');
  35. select * from openjson(@json, '$[0].Names[0]');
  36. select * from openjson(@json, '$[0].Names[0].NameLinkType');
  37. select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains');
  38. select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value');
  39. select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0]');
  40. select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0][0]');
  41. select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0][0].com_recd'); --selecting path for com_recd
  42. select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0][0].com_ack'); --selecting path for com_ack

在这里,我展示了json不同部分的选择。数组的内容总是引用为 [0] 因为它总是第一个在这里选择的索引。
有关sql server上json路径的更多信息,请参见此处

展开查看全部

相关问题