如何在SQL Server中重命名JSON密钥(T-SQL)?

如果你一直使用json_modify()函数来修改sql server中的json文档,那么你可能习惯于修改key/value属性的value部分。但是你知道你也可以修改key部分吗?

如何在SQL Server中重命名JSON密钥(T-SQL)?

这样做的诀窍是将value复制到一个新键,然后删除旧键。

这里有一个基本的例子来说明我的意思。

-- Declare a variable and assign some JSON to itDECLARE @data NVARCHAR(50)='{"Name":"Homer"}'-- Print the current JSONPRINT @data-- Rename the key (by copying the value to a new key, then deleting the old one)SET @data= JSON_MODIFY(  JSON_MODIFY(@data,'$.Handle', JSON_VALUE(@data,'$.Name')),  '$.Name',  NULL )-- Print the new JSONPRINT @data

结果:

Find JSON Path Online Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30 查看详情 Find JSON Path Online

{"Name":"Homer"}{"Handle":"Homer"}

这将打印出原始的键/值对,然后是新的键/值对。

虽然我们可以说我们“重命名”了密钥,但实际上我们只是创建了一个新密钥,将现有值复制到该新密钥,然后将旧密钥设置为NULL来删除它。

在本例中,我们使用JSON_VALUE()函数来提取值。

数值

在将数据复制到新键时需要小心。默认情况下,SQL Server将它括在双引号中。这可能是你想要的,也可能不是。

但是,如果你复制一个数值,你可能希望它仍然是一个数值(即没有双引号)。在本例中,需要使用CAST()函数将其转换为数值数据类型。这里有一个例子:

-- Declare a variable and assign some JSON to itDECLARE @data NVARCHAR(50)='{"Residents":768}'-- Print the current JSONPRINT @data-- Rename the key (by copying the value to a new key, then deleting the old one)SET @data= JSON_MODIFY(  JSON_MODIFY(@data,'$.Population', CAST(JSON_VALUE(@data,'$.Residents') AS int)),  '$.Residents',  NULL )-- Print the new JSONPRINT @data

结果:

{"Residents":768}{"Population":768}

所以结果是一个数字。

如果我们从这个例子中删除CAST()函数,我们得到的结果是:

-- Declare a variable and assign some JSON to itDECLARE @data NVARCHAR(50)='{"Residents": 768}'-- Print the current JSONPRINT @data-- Rename the key (by copying the value to a new key, then deleting the old one)SET @data= JSON_MODIFY(  JSON_MODIFY(@data,'$.Population', JSON_VALUE(@data,'$.Residents')),  '$.Residents',  NULL )-- Print the new JSONPRINT @data

结果:

{"Residents": 768}{"Population":"768"}

因此,在本例中,我们不仅重命名了键,还将(JSON)数据类型从数字更改为字符串。

注意,JSON不区分不同的数字类型。它只有一个数字类型:number。

key键和空格

在本例中,我将一个现有键重命名为一个包含空格的新键(它由两个单词组成,用空格分隔)。

因为新键包含空格,所以我需要用双引号括住键。如果不这样做,就会出现错误。

-- Declare a variable and assign some JSON to itDECLARE @data NVARCHAR(50)='{"Population":68}'-- Print the current JSONPRINT @data-- Rename the key (by copying the value to a new key, then deleting the old one)SET @data= JSON_MODIFY(  JSON_MODIFY(@data,'$."Average IQ"', CAST(JSON_VALUE(@data,'$.Population') AS int)),  '$.Population',  NULL )-- Print the new JSONPRINT @data

结果:

{"Population":68}{"Average IQ":68}

嵌套的属性

如果属性是嵌套的,则没有问题。只需使用点符号来引用它。

DECLARE @data NVARCHAR(4000)SET @data=N'{      "Suspect": {           "Name": "Homer Simpson",         "Hobbies": ["Eating", "Sleeping", "Base Jumping"]      } }'PRINT @dataSET @data=  JSON_MODIFY(    JSON_MODIFY(@data,'$.Suspect.Qualifications', JSON_QUERY(@data,'$.Suspect.Hobbies')),   '$.Suspect.Hobbies',   NULL  )PRINT @data

结果:

{ "Suspect": { "Name": "Homer Simpson", "Hobbies": ["Eating", "Sleeping", "Base Jumping"] }}{ "Suspect": { "Name": "Homer Simpson" ,"Qualifications":["Eating", "Sleeping", "Base Jumping"]}}

你可能还注意到,这个示例使用JSON_QUERY()函数来提取值,而不是像前面的示例那样使用JSON_VALUE()

这是因为在本例中,我们正在提取一个数组,而JSON_VALUE()不能提取整个数组(它只能从数组中提取标量值)。另一方面,JSON_QUERY()函数提取对象和数组,但不提取标量值。

相关推荐:《SQL教程》《MySQL教程》

以上就是如何在SQL Server中重命名JSON密钥(T-SQL)?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/372972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 08:39:25
下一篇 2025年11月6日 08:40:30

相关推荐

发表回复

登录后才能评论
关注微信