2017-07-24 146 views
1
DECLARE @JSON_CurrentArray NVARCHAR(MAX) = '{"Some List": 
[{"Name":"Item1","Id":"2"},{"Name":"Item2","Id":"3"}]}'; 
DECLARE @JSON_TopLevel NVARCHAR(MAX) = '{"OverAll":[{"Product Section":[]}]}'; 
SET @JSON_TopLevel = JSON_MODIFY(@JSON_TopLevel, 'append $."Overall"."Product Selection"', JSON_QUERY(@JSON_CurrentArray)); 
SELECT @JSON_TopLevel; 

我一直努力坚持CurrentArray到顶层,添加阵列阵列JSON_MODIFY

尝试一些疯狂的附加/不严/严格的组合......但是即时通讯新JSON操纵和我几乎是在“脑液阶段'在这个项目。 我也想过要添加一个空白数组,但无济于事(我可能也会这样做是错误的)

现在,我代码盲目,所以,如果你能以某种方式注入一个数组到另一个... #foreverindebted。

回答

1

如果我理解正确的话,你想是这样的:

DECLARE @JSON_CurrentArray NVARCHAR(MAX) = '{"Some List": 
[{"Name":"Item1","Id":"2"},{"Name":"Item2","Id":"3"}]}'; 
DECLARE @JSON_TopLevel NVARCHAR(MAX) = '{"OverAll":[{"Product Section":[]}]}'; 
SET @JSON_TopLevel = JSON_MODIFY(@JSON_TopLevel, 'append $."OverAll"[0]."Product Section"', JSON_QUERY(@JSON_CurrentArray)); 
SELECT @JSON_TopLevel; 

DBFiddle

结果:

{ “整体”:[{ “产品部分”: {“Name List”:[{“Name”:“Item1”,“Id”:“2”},{“Name”:“Item2”,“Id”:“3”}]}]}]}

要检查你的路径是正确的,你可以使用JSON_QUERYstrict模式:

SELECT JSON_QUERY(@JSON_TopLevel, 'strict $."OverAll"."Product Section"') 
--Msg 13608 Level 16 State 5 Line 7 
--Property cannot be found on the specified JSON path. 

-- vs 
SELECT JSON_QUERY(@JSON_TopLevel, 'strict $."OverAll"[0]."Product Section"') 
-- [] 
+0

很抱歉的产品选择/节。无法使用我的实际数据。我会在大约一个小时内尝试。但是,我理解正确......我正在构建一个具有各种深度的JSON对象。总体上总是有位置[0],或者我需要声明其他属性的位置。假设我所有具有相似名称的多个记录都是叶子,并且永远不需要添加。我有一个父子树,唯一的名称,并且我用树中的数据填充TopLevel(用于存储/编辑) –