【发布时间】:2018-05-09 16:26:05
【问题描述】:
我正在使用 nodejs 创建一个 API。 API 接受请求并以 JSON 格式响应
例如: 我的数据库中有一个表 QUESTION,因此对端点 http://localhost/table/question 的 GET 请求将以 JSON 格式输出该表。
但是在执行JOINS的时候有问题
考虑表 QUESTION 和 CHOICE。一个问题有很多选择(答案),他们的加入将是
表:
我正在尝试转换成这样的东西
{
"0":{
"QUESTION":"If Size of integer pointer is 4 Bytes what is size of float pointer ?",
"OPTION":{
"A":"3 Bytes",
"B":"32 Bits",
"C":"64 Bits",
"D":"12 Bytes"
}
},
"1":{
"QUESTION":"Which one is not a SFR",
"OPTION":{
"A":"PC",
"B":"R1",
"C":"SBUF"
}
},
"2":{
"QUESTION":"What is Size of DPTR in 8051",
"OPTION":{
"A":"16 Bits",
"B":"8 Bytes",
"C":"8 Bits"
}
},
"3":{
"QUESTION":"Is to_string() is valid builtin function prior to c++11 ? ",
"OPTION":{
"A":"Yes",
"B":"No"
}
}
}
显而易见的解决方案是使用 JOIN 解析查询并将其转换为 JSON。 有没有更有效的方法?
【问题讨论】:
-
您是否可以访问 php?它有一个很好的 json_encode 函数。很容易从 php 连接到 MySQL
-
您的 JSON 对我来说似乎不是最理想的。数字键是顶级 id 还是索引?在后一种情况下,将其替换为数组,它会更有意义。至于处理本身,只需遍历结果并在找到新问题时创建一个新对象,或者如果问题已经存在则添加到 OPTIONS(即它与您看到或添加的最后一个相同)。你可以使用一个简单的循环,或者使用
reduce来做到这一点。一个你有你的数据只是JSON.stringify它(或者如果使用Express,则用res.json输出它)。 -
注意:如果问题涉及 PostgreSQL 而不是 MySQL,您可以轻松地在 SQL 中使用数组和聚合函数完成所有这些操作。