我昨天发布了一个与此有关的问题,解决主义者非常有帮助地回答了这个问题,但是我现在有一个类似的跟进问题。
我想从JSON中获取两套数据。
我有三个数据集,一个是标题,一个是一组客户记录,最后一个是错误对象。 我希望尝试获得的结构是: 标头 顾客 错误
但是我得到的是: 标头 客户,错误 客户,错误
现在在此示例中,该错误为null,因此我很高兴因该错误为null而被忽略,或者作为一个空对象返回,但我希望一个,而不是每个客户一个。
这是我目前得到的:
select isjson('{"APIResult":[{"ID":200,
"Status_Message":"Success",
"Developer_Message":"Customers found",
"User_Message":"Customers found",
"Return_Code":0,
"Customer":[{"ID":"A6B10FA0-85AD-422D-8A7E-07EEA541593E",
"First_Name":"Bbb",
"Paternal_Last_Name":"Bbbbb",
"Email_Address":"bbbb@example.com",
"Error":[{}]
},
{"ID":"91EE2FD6-2C40-4CFD-ABB7-2CDAE3624487",
"First_Name":"Aaaa",
"Paternal_Last_Name":"Aaaaa",
"Email_Address":"aaaaa@example.com",
"Error":[{}]
}]
}]
}')
这就是我想要得到的:
select isjson('{"APIResult":[{"ID":200,
"Status_Message":"Success",
"Developer_Message":"Customers found",
"User_Message":"Customers found",
"Return_Code":0,
"Customer":[{"ID":"A6B10FA0-85AD-422D-8A7E-07EEA541593E",
"First_Name":"Bbb",
"Paternal_Last_Name":"Bbbbb",
"Email_Address":"bbbb@example.com"
},
{"ID":"91EE2FD6-2C40-4CFD-ABB7-2CDAE3624487",
"First_Name":"Aaaa",
"Paternal_Last_Name":"Aaaaa",
"Email_Address":"aaaaa@example.com"
}],
"Error":[{}]
}]
}')
两者都是有效的JSON(正如您所看到的,我这次已经测试过),但是我不知道如何获取第二种格式。
这是我正在运行以获取输出的查询:
declare @returncode int = 0
,@VerboseMsg nvarchar(4000) = 'Customers found'
,@DisplayMsg nvarchar(4000) = 'Customers found'
CREATE TABLE #Customers (CustomerID UNIQUEIDENTIFIER DEFAULT(NEWID()), FirstName NVARCHAR(50), PaternalLastName NVARCHAR(50), EmailAddress NVARCHAR(250))
INSERT INTO #Customers (FirstName, PaternalLastName, EmailAddress)
VALUES ('Aaaa', 'Aaaa', 'aaaa@example.com'), ('Bbbb', 'Bbbb', 'bbbb@example.com')
SELECT st.APIStatus AS 'ID'
,st.StatusMessage AS 'Status_Message'
,@VerboseMsg AS 'Developer_Message'
,@DisplayMsg AS 'User_Message'
,st.ReturnCode AS 'Return_Code'
,[Customer].CustomerID AS 'ID'
,[Customer].FirstName AS 'First_Name'
,[Customer].PaternalLastName AS 'Paternal_Last_Name'
,[Customer].EmailAddress AS 'Email_Address'
,[Error].ErrorCode AS 'Error_Code'
,[Error].ErrorMsg AS 'Error_Message'
FROM (SELECT 200 AS APIStatus, 'Success' AS StatusMessage, @ReturnCode AS ReturnCode) st
LEFT JOIN (SELECT CustomerID
,FirstName
,PaternalLastName
,EmailAddress
,@ReturnCode AS ReturnCode
FROM #Customers
) As [Customer]
ON st.ReturnCode = [Customer].ReturnCode
LEFT JOIN (SELECT @ReturnCode AS ErrorCode, @DisplayMsg AS ErrorMsg WHERE @returncode != 0) AS [Error]
ON [Error].ErrorCode = st.ReturnCode
FOR JSON AUTO, ROOT('APIResult')
是否只有我自己将东西缝合在一起才能获得此输出? JSON对我来说仍然很新,我正努力了解它的构成。
答案 0 :(得分:0)
在此设置中,我将在返回代码后放置错误代码,并使用带有JSON PATH的子查询,如下所示:
@yield('content')
请注意,如果您在Error中没有任何记录,则将其省略,但是在这种情况下可以使用null,我也注意到您使用过两次@ReturnCode,但我不知道这是否是有意的或错误。