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

问题描述:

我有一个名为属性的列,其中包含一个JSON blob。该blob可以在单个行中具有单个和多个键:值。替换/重命名/修改SQL Server中的JSON密钥

下面是简化样本数据的3行:

{"68c4":["yes"], "c8ew":["0","1"], "p6i4":["London","Frankfurt","Tokyo"]} 
{"472h":["USD"], "c8ew":["-1","9"], "p6i4":["New York"]} 
{"472h":["EUR","JPY"]} 

关键的是UUID的,我需要与人可读组件

我知道我可以写类似更换这些:

SELECT JSON_MODIFY(attributes, '$."p6i4"', 'City') AS modified 

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

+0

我删除了Postgres的标签为'JSON_MODIFY()'是一个SQL Server功能。 –

+0

ahh对不起。由于这些数据来自Postgres jsonb,所以我将它留在那里,但可能与解决方案中的SQL Server不太相关。 – onji

+0

您可以在PostgreSQL端修改数据吗? –

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

此代码将增加新的“城市”键与“p6i4”的值:

SELECT JSON_MODIFY(attributes, '$.City', JSON_QUERY(attributes, '$.p6i4')) 

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

SELECT JSON_MODIFY(
      JSON_MODIFY(attributes, '$.City', JSON_QUERY(attributes, '$.p6i4')), 
     '$.p6i4', NULL) 
+0

这很好用,谢谢关于将值设置为NULL以删除一个键的提示! – onji