我需要将JSON从一个模式转换为另一个模式。
JSON来自C#应用程序,我不允许从那里进行修改。
从C#应用程序中,JSON存储在特定表中的nvarchar字段中。
来自C#的源格式如下:
{
"officeSummary" : {
"name" : "Test Office",
"geographicData" : [{
"addressLine1" : "AddressLine 1",
"city" : "TestCity",
"stateProvince" : "NJ",
"postalCode" : "08543"
}
],
}
}
我需要将其翻译成:
{
"office" : {
"name" : "Test Office",
"officeAddress" : [{
"streetAddress" : "AddressLine 1",
"city" : "TestCity",
"stateProvince" : "NJ",
"postalCode" : "08543"
}
],
}
}
有没有什么办法可以通过使用SQL Server JSON功能更改密钥名称来解决这个问题?与JSON_VALUE
或JSON_MODIFY
答案 0 :(得分:1)
根据此Example - Rename a key,您可以使用3个步骤重命名密钥。下面我提供了将'addressLine1'重命名为'streetAddress'的代码。可以使用相同的方法替换剩余的值,尽管它有点乱。注意,重命名的密钥被移动到最后,但这当然不会影响json解析应用程序。
DECLARE @json AS NVARCHAR(MAX);
SET @json = '{
"officeSummary" : {
"name" : "Test Office",
"geographicData" : [{
"addressLine1" : "AddressLine 1",
"city" : "TestCity",
"stateProvince" : "NJ",
"postalCode" : "08543"
}
]
}
}'
SELECT @json =
JSON_MODIFY(
JSON_MODIFY(@json, '$.officeSummary.geographicData[0].streetAddress'
, JSON_VALUE(@json, '$.officeSummary.geographicData[0].addressLine1')
)
, '$.officeSummary.geographicData[0].addressLine1', NULL)
PRINT @json
结果
{
"officeSummary" : {
"name" : "Test Office",
"geographicData" : [{
"city" : "TestCity",
"stateProvince" : "NJ",
"postalCode" : "08543"
,"streetAddress":"AddressLine 1"}
]
}
}
答案 1 :(得分:0)
我认为你可以使用Newtonsoft的modify json .net库功能和SSIS脚本转换任务(假设你有SSIS可用)。
然后您可以将属性值读入变量。删除属性并使用保存的值创建重命名的属性。