【发布时间】:2022-01-14 02:28:58
【问题描述】:
我的数据库表上的一列包含以下 JSON 序列化字符串。
Table: school_details
school_id class_json
25 {
"class_id": "1377",
"class_name": "XXX",
"No.of students": "100"
}
25 {
"class_id": "1378",
"class_name": "YYX",
"No.of students": "80"
}
现在我想读取这些数据并将其作为 JSON 数组发送,如下面的“预期输出”所示。但是当我像下面这样做时,我得到了不同的输出。我应该如何更改代码以获得所需的输出?像上面那样在数据库表中直接存储 JSON 是一个好习惯吗?还是需要先转换成字符串再存入数据库?
string school_id="25";
string status="success";
sql = "SELECT class_json FROM school_details WHERE school_id @school_id";
cmd = new SqlCommand(sql, con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@school_id", school_id);
dr = cmd.ExecuteReader();
var dt = new DataTable();
if (dr.HasRows)
{
dt.Load(dr);
status = "success";
}
var getData = new { status, school_id,Class_Deatils=dt };
return getData;
输出:
{
"status": "success",
"school_id": "25",
"Class_Deatils": [
{
"class_json ": "{\n \"class_id\": \"1377\",\n \"class_name\": \"XXX\",\n \"No.of students\": \"100\"\n }"
},
{
"class_json ": "{\n \"class_id\": \"1378\",\n \"class_name\": \"YYX\",\n \"No.of students\": \"80\"\n }"
}
]
}
预期输出:
{
"status": "success",
"school_id": "25",
"Class_Deatils": [{
"class_id": "1377",
"class_name": "XXX",
"No.of students": "100"
},
{
"class_id": "1378",
"class_name": "YYX",
"No.of students": "80"
}
]
}
【问题讨论】:
-
您需要将 JSON 反序列化为一个对象(可能是您制作的自定义类来表示数据)。
-
你知道 \n 是换行符吗?它们在字符串中是否像那样可见?这看起来很像在调试器中为可视化而编码的字符串。你从哪里得到输出?请考虑不要使用数据表。
-
您真的应该将该 JSON 规范化到另一个表中。顺便说一句,您的连接、命令和阅读器对象中缺少
using块