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

当我有多个数组元素时,获取特定的JSON值

  •  0
  • JoAnywhere  · 技术社区  · 2 年前

    我有一个JSON字符串,看起来像这样:

    [
        {
            'tagType': 'Author',
            'tagValue': 'Anne Author'
        },
        {
            'tagType': 'Business',
            'tagValue': 'the bidness'
        },
        {
            'tagType': 'Geography',
            'tagValue': 'US'
        },
        {
            'tagType': 'Subscription',
            'tagValue': 'A subscription'
        }
    ]
    

    对于给定的标签类型(例如地理位置),我如何获得标签值(例如美国)

    我尝试过各种难看的选择查询。我觉得必须有一种优雅的方式来做到这一点

    此查询(作为更大查询的一部分)有效

    [Geography] = (SELECT tagValue 
                                FROM OPENJSON(REPLACE(p.tags, '''', '"')) 
                                WITH (tagType VARCHAR(255) '$.tagType', tagValue VARCHAR(255) '$.tagValue')
                                WHERE tagType = 'Geography')
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   Dale K    2 年前

    几乎正确 OPENJSON

    declare @j nvarchar(max)= N'[{"tagType": "Author", "tagValue": "Anne Author"}, {"tagType": "Business", "tagValue": "the bidness"}, {"tagType": "Geography", "tagValue": "US"}, {"tagType": "Subscription", "tagValue": "A subscription"}]'
    
    SELECT tagType, tagValue
    FROM OPENJSON(@j)  
    WITH (
        tagType varchar(20),
        tagValue varchar(20)
    )
    WHERE tagType = 'Geography'
    

    后果

    标签类型 tagValue
    著者 安妮作家
    商业 招标
    地理 美国
    订阅 订阅

    更新:

    SELECT tagValue
    FROM OPENJSON(@j)  
    WITH (
        tagType varchar(20),
        tagValue varchar(20)
    )
    WHERE tagType = 'Geography'
    

    结果是:“美国”