代码之家  ›  专栏  ›  技术社区  ›  frosty

在SQL Server中查询根为对象数组的Json

  •  0
  • frosty  · 技术社区  · 6 年前

    我在SQL表中有一列具有json值,如下所示:

    [
      {"address":{"value":"A9"},
      "value":{"type":11,"value":"John"}}, 
      {"address":{"value":"A10"},
      "value":{"type":11,"value":"Doe"}}]
    

    JSON_值或JSON_查询的MSDN示例需要在根目录下有一个JSON对象。我如何通过上面的查询返回“地址”为A9,“值”为John的行?我正在使用SQLAzure。

    1 回复  |  直到 6 年前
        1
  •  3
  •   David Browne - Microsoft    6 年前

    比如:

    declare @json nvarchar(max) = '[
      {"address":{"value":"A9"},
      "value":{"type":11,"value":"John"}}, 
      {"address":{"value":"A10"},
      "value":{"type":11,"value":"Doe"}}]'
    
    
    
    select a.*
    from openjson(@json) r
    cross apply openjson(r.value)
    with (   
            address  nvarchar(200)   '$.address.value',  
            name     nvarchar(200)  '$.value.value'
         ) a  
    where address = N'A9'
      and name = N'John'
    

    输出

    address name
    ------- -----
    A9      John
    
    (1 row affected)
    
        2
  •  0
  •   El Ronnoco    3 年前

    它可能与OP的帖子不完全相关,因为用法不同,但是可以从根级别的未命名JSON数组中检索任意项,例如。

    declare @json nvarchar(max) = '[
      {"address":
        {"value":"A9"},
       "value":
        {"type":11,"value":"John"}
      }, 
      {"address":
        {"value":"A10"},
       "value":
        {"type":11,"value":"Doe"}
      }
    ]'
    
    select
        JSON_VALUE(
            JSON_QUERY(@json, '$[0]'),
            '$.address.value') as 'First address.value',
        JSON_VALUE(
            JSON_QUERY(@json, '$[1]'),
            '$.address.value') as 'Second address.value'
    

    输出:

    First address.value         Second address.value
    A9                          A10