【问题标题】:How can I read below Json column stored in SQL Server using openjson?如何使用 openjson 读取存储在 SQL Server 中的 Json 列下方?
【发布时间】:2019-10-02 17:01:35
【问题描述】:
Declare @ResponseText nvarchar(4000)

set @responseText ='{
    "submissions": [
        {
        "xml_id":"id_x5d94851726b470.68571510",
        "fields": [ 
            {"fieldvalue":"customerEmail@xyzdomain.com","fieldid":"57282490"},
            {"fieldvalue":"123","fieldid":"57282423"},
            {"fieldvalue":"12345-678900","fieldid":"57282500"}, 
            {"fieldvalue":"Test Message here ","fieldid":"57282564"}
         ]
         }
    ]
 }'

 SELECT  *
 FROM OPENJSON (@ResponseText, '$.submissions') WITH (
    ID NVARCHAR(100) '$.xml_id',
    $.fields.field NVARCHAR(100) ...
 )

etc 其余的所有记录?字段数组下的其余字段我得到“NULL”

【问题讨论】:

  • 您能否将所需的结果添加到您的问题中?

标签: arrays json sql-server open-json sql-server-json


【解决方案1】:

你可以这样试试:

Declare @ResponseText nvarchar(4000)

set @responseText ='{
    "submissions": [
        {
        "xml_id":"id_x5d94851726b470.68571510",
        "fields": [ 
            {"fieldvalue":"customerEmail@xyzdomain.com","fieldid":"57282490"},
            {"fieldvalue":"123","fieldid":"57282423"},
            {"fieldvalue":"12345-678900","fieldid":"57282500"}, 
            {"fieldvalue":"Test Message here ","fieldid":"57282564"}
         ]
         }
    ]
 }'

--查询

 SELECT A.ID
       ,B.*
 FROM OPENJSON (@ResponseText, '$.submissions') 
      WITH (ID NVARCHAR(100) '$.xml_id'
           ,fields NVARCHAR(MAX) AS JSON) A
 OUTER APPLY OPENJSON(a.fields)
             WITH(fieldvalue NVARCHAR(150)
                 ,fieldid BIGINT) B;

结果

ID                          fieldvalue                  fieldid
id_x5d94851726b470.68571510 customerEmail@xyzdomain.com 57282490
id_x5d94851726b470.68571510 123                         57282423
id_x5d94851726b470.68571510 12345-678900                57282500
id_x5d94851726b470.68571510 Test Message here           57282564

简而言之:

您开始正确地使用WITH-子句读取xml_id。属性fields 只不过是同一级别的另一个元素。但我们将其退回AS JSON。这将允许添加另一个APPLY OPENJSON(),传入我们从$.fields 获得的片段并使用另一个WITH 子句来获取数组中对象的两个属性。

【讨论】:

  • 感谢 Shnugo 的正确回答,得到了您的支持以及有用的示例和解释。非常感谢。
猜你喜欢
  • 2016-09-10
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多