将JSON转换为不同的JSON

时间:2017-06-29 02:11:27

标签: sql sql-server json

我需要将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_VALUEJSON_MODIFY

相同

2 个答案:

答案 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可用)。

然后您可以将属性值读入变量。删除属性并使用保存的值创建重命名的属性。