额外的括号“{”来自 SQL 服务器的 JSON 输出
Extra parenthesis '{' is coming in JSON output from SQL server
我是 JSON 的新手,想直接从 SQL 服务器生成 JSON 输出。
但是在从 C#.net 调用 SP 时,我在开头得到了一个额外的“{”括号。
并且在尝试将 JSON 存储到 SQL 中时,它给出了错误提示 JSON.
无效
下面是我的存储过程代码。
Create PROCEDURE [dbo].[GetData]
As
BEGIN
SELECT Trucknumber,
(
select * from TruckDetails
where TruckId = Truckmaster.TruckId
FOR JSON AUTO
) AS CompData
FROM Truckmaster
Where TruckNumber = 'HP09A3487'
FOR JSON AUTO
END
C#代码------------------------------------
public StringBuilder RunStoredProcedureWithString(string strSPName)
{
StringBuilder jsonResult = new StringBuilder();
var queryWithForJson = "exec " + strSPName;
var conn = new SqlConnection(GenerateConnectionString(_DBName));
var cmdNew = new SqlCommand(queryWithForJson, conn);
conn.Open();
var reader = cmdNew.ExecuteReader();
if (!reader.HasRows)
{
jsonResult.Append("[]");
}
else
{
while (reader.Read())
{
jsonResult.Append(reader.GetValue(0).ToString());
}
}
return jsonResult;
}
正在调用存储过程。
var strJson = objDBSupport.RunStoredProcedureWithString("GetData");
if(strJson.Length > 0)
{
//Success
}
期望的输出并且也在 SQL。
[{"Trucknumber":"HP09A3487","CompData":[{"TruckId":37886,"CompNo":1,"Capacity":6000},{"TruckId":37886,"CompNo":2,"Capacity":4000},{"TruckId":37886,"CompNo":3,"Capacity":3000},{"TruckId":37886,"CompNo":4,"Capacity":5000}]}]
C# 中的输出带有额外的“{”,无法插入另一个 Table。
{[{"Trucknumber":"HP09A3487","CompData":[{"TruckId":37886,"CompNo":1,"Capacity":6000},{"TruckId":37886,"CompNo":2,"Capacity":4000},{"TruckId":37886,"CompNo":3,"Capacity":3000},{"TruckId":37886,"CompNo":4,"Capacity":5000}]}]}
有什么建议吗?
我重现了您的设置,但无法重现任何问题。我怀疑您这样做是为了查看您的数据:
Visual Studio 添加最外层的 { }
纯粹是为了在调试器中显示。它们不是您数据的一部分。这里我的数据肯定没有{} in:
它对您检查的每个对象执行此操作:
A StringBuilder
有一个覆盖 ToString
显示内容而不是类型名称(object
的 ToString
的默认行为),因此内容SB 出现在调试器工具提示中,在 { }
内。因为 {
看起来像 JSON 你会感到困惑..
查看直接 window 在“对象表示”与“字符串表示”中的区别
请注意,字符串表示中 "
之前的那些 \
也不在您的数据中;它们是在可视化字符串时添加的,以便更容易地将字符串作为文字粘贴到代码中
如果您想在没有这些操作的情况下真正查看您的数据,请将其放入字符串中,然后单击 StringBuilder 工具提示中的放大镜(有多种可视化选项):
您会在文本框中看到该字符串,就像您将其写入文件并在记事本中打开它一样
如果这种可视化混淆不是真正的问题,post 一张显示您如何确定数据的屏幕截图有额外的 {},因此我们可以看到您的思维过程并从中反省
我是 JSON 的新手,想直接从 SQL 服务器生成 JSON 输出。
但是在从 C#.net 调用 SP 时,我在开头得到了一个额外的“{”括号。 并且在尝试将 JSON 存储到 SQL 中时,它给出了错误提示 JSON.
无效下面是我的存储过程代码。
Create PROCEDURE [dbo].[GetData]
As
BEGIN
SELECT Trucknumber,
(
select * from TruckDetails
where TruckId = Truckmaster.TruckId
FOR JSON AUTO
) AS CompData
FROM Truckmaster
Where TruckNumber = 'HP09A3487'
FOR JSON AUTO
END
C#代码------------------------------------
public StringBuilder RunStoredProcedureWithString(string strSPName)
{
StringBuilder jsonResult = new StringBuilder();
var queryWithForJson = "exec " + strSPName;
var conn = new SqlConnection(GenerateConnectionString(_DBName));
var cmdNew = new SqlCommand(queryWithForJson, conn);
conn.Open();
var reader = cmdNew.ExecuteReader();
if (!reader.HasRows)
{
jsonResult.Append("[]");
}
else
{
while (reader.Read())
{
jsonResult.Append(reader.GetValue(0).ToString());
}
}
return jsonResult;
}
正在调用存储过程。
var strJson = objDBSupport.RunStoredProcedureWithString("GetData");
if(strJson.Length > 0)
{
//Success
}
期望的输出并且也在 SQL。
[{"Trucknumber":"HP09A3487","CompData":[{"TruckId":37886,"CompNo":1,"Capacity":6000},{"TruckId":37886,"CompNo":2,"Capacity":4000},{"TruckId":37886,"CompNo":3,"Capacity":3000},{"TruckId":37886,"CompNo":4,"Capacity":5000}]}]
C# 中的输出带有额外的“{”,无法插入另一个 Table。
{[{"Trucknumber":"HP09A3487","CompData":[{"TruckId":37886,"CompNo":1,"Capacity":6000},{"TruckId":37886,"CompNo":2,"Capacity":4000},{"TruckId":37886,"CompNo":3,"Capacity":3000},{"TruckId":37886,"CompNo":4,"Capacity":5000}]}]}
有什么建议吗?
我重现了您的设置,但无法重现任何问题。我怀疑您这样做是为了查看您的数据:
Visual Studio 添加最外层的 { }
纯粹是为了在调试器中显示。它们不是您数据的一部分。这里我的数据肯定没有{} in:
它对您检查的每个对象执行此操作:
A StringBuilder
有一个覆盖 ToString
显示内容而不是类型名称(object
的 ToString
的默认行为),因此内容SB 出现在调试器工具提示中,在 { }
内。因为 {
看起来像 JSON 你会感到困惑..
查看直接 window 在“对象表示”与“字符串表示”中的区别
请注意,字符串表示中 "
之前的那些 \
也不在您的数据中;它们是在可视化字符串时添加的,以便更容易地将字符串作为文字粘贴到代码中
如果您想在没有这些操作的情况下真正查看您的数据,请将其放入字符串中,然后单击 StringBuilder 工具提示中的放大镜(有多种可视化选项):
您会在文本框中看到该字符串,就像您将其写入文件并在记事本中打开它一样
如果这种可视化混淆不是真正的问题,post 一张显示您如何确定数据的屏幕截图有额外的 {},因此我们可以看到您的思维过程并从中反省