You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ResultSet无法获取全部dataColumn值,SQL Server JSON数组数据重复问题

解决JSON数组重复写入最后一条数据的问题

嘿,这个问题我之前踩过一模一样的坑!大概率是你在构建JSON的过程中犯了两个常见错误之一:要么是重复引用了同一个对象,要么是字符串拼接时逻辑出错重复添加了最后一条数据。

情况1:引用类型重复引用(C#/JavaScript等语言常见)

举个例子,如果你在循环外面创建了一个对象,每次循环只修改它的属性再加入数组,那数组里的所有元素其实都是同一个对象的引用——最后一次修改会覆盖之前的所有引用,导致数组里全是最后一条数据。

错误代码示例(C#):

var holidayObj = new JObject(); // 循环外创建对象
var holidayArray = new JArray();
while (reader.Read())
{
    holidayObj["date"] = reader["holidays"].ToString();
    holidayArray.Add(holidayObj); // 每次加的都是同一个对象引用
}

正确写法:

把对象创建放到循环内部,每次循环都生成新的对象:

var holidayArray = new JArray();
while (reader.Read())
{
    var holidayObj = new JObject(); // 循环内新建对象
    holidayObj["date"] = reader["holidays"].ToString();
    holidayArray.Add(holidayObj);
}

如果是JavaScript,错误和正确写法逻辑完全一致:

// 错误写法
let holidayObj = {};
let holidayArr = [];
dates.forEach(date => {
    holidayObj.date = date;
    holidayArr.push(holidayObj);
});

// 正确写法
let holidayArr = [];
dates.forEach(date => {
    let holidayObj = { date: date }; // 每次新建对象
    holidayArr.push(holidayObj);
});

情况2:字符串拼接逻辑错误

如果你是用StringBuilder或者直接拼接字符串来生成JSON,可能是最后处理逗号的时候不小心重复添加了最后一条数据。

错误代码示例(C#):

StringBuilder sb = new StringBuilder();
sb.Append("[");
string lastDate = "";
while (reader.Read())
{
    lastDate = reader["holidays"].ToString();
    sb.Append($"{{\"date\":\"{lastDate}\"}},");
}
// 错误:这里又手动加了一次lastDate,导致重复
sb.Append($"{{\"date\":\"{lastDate}\"}}]");

正确写法:

用标记判断是否是第一个元素,避免多余逗号,也不用额外重复添加:

StringBuilder sb = new StringBuilder();
sb.Append("[");
bool isFirstItem = true;
while (reader.Read())
{
    if (!isFirstItem)
        sb.Append(","); // 非第一个元素前加逗号
    string date = reader["holidays"].ToString();
    sb.Append($"{{\"date\":\"{date}\"}}");
    isFirstItem = false;
}
sb.Append("]");

你可以对照自己的代码看看属于哪种情况,调整后应该就能解决重复的问题啦~

内容的提问来源于stack exchange,提问作者Sagitarius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:08:43