替换/重命名/修改 SQL Server 中的 JSON 密钥

onj*_*nji 4 sql-server json

我有一个名为“属性”的列,其中包含一个 JSON blob。该 blob 在一行中可以有单个或多个键:值。

以下是 3 行简化的示例数据:

{"68c4":["yes"],  "c8ew":["0","1"],  "p6i4":["London","Frankfurt","Tokyo"]}
{"472h":["USD"],  "c8ew":["-1","9"],  "p6i4":["New York"]}
{"472h":["EUR","JPY"]}
Run Code Online (Sandbox Code Playgroud)

密钥是 UUID,我需要用人类可读的组件替换它们

我知道我可以写这样的东西:

SELECT JSON_MODIFY(attributes, '$."p6i4"', 'City') AS modified
Run Code Online (Sandbox Code Playgroud)

但这改变了价值。我的问题是我需要更改密钥。有谁知道如何做到这一点?

Jov*_*SFT 8

您可以使用旧键的值/片段插入新键并删除旧键:值。

此代码将使用“p6i4”中的值添加新的“City”键:

SELECT JSON_MODIFY(attributes, '$.City', JSON_QUERY(attributes, '$.p6i4'))
Run Code Online (Sandbox Code Playgroud)

请注意,您需要使用 JSON_QUERY 因为您有数组值。如果将旧密钥复制到另一个密钥后在旧密钥中设置 NULL 值,JSON_MODIFY 将删除它:

SELECT JSON_MODIFY(
            JSON_MODIFY(attributes, '$.City', JSON_QUERY(attributes, '$.p6i4')),
       '$.p6i4', NULL) 
Run Code Online (Sandbox Code Playgroud)