2017-06-29 89 views
1

我有將JSON從一種模式轉換爲另一種模式的要求。將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

+0

什麼產生JSON模式/文件?它是一個存儲過程嗎? –

+0

它作爲nvarchar存儲在數據庫表中。 –

+0

將JSON存儲到數據庫表中的是什麼?基本上我試圖找出我們要修改的地方。 –

回答

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"} 
     ]     
    } 
} 
+0

您可能需要查看[示例 - 修改JSON對象](https://docs.microsoft.com/en-us/sql/t-sql/functions/json -modify-transact-sql#examples),使用'JSON_QUERY'來避免雙重轉義。 –

0

我想你可以使用來自Newtonsoft modify json .NET庫的功能與SSIS腳本改造任務組合(假設你有SSIS可用)。

然後你可以將屬性值讀入一個變量。刪除該屬性並使用保存的值創建一個重命名的屬性。