我正在尝试通过node-mysql模块从Node.js应用程序中的Mysql中获取JSON类型数据。
在数据库上运行此查询:
SELECT countries.id,
countries.country_name,
Json_object("start", start_port, "end", end_port)
ten_minutes,
Json_object("start", start_port + 10000, "end", end_port + 10000)
one_minutes,
Json_object("start", start_port + 20000, "end", end_port + 20000)
thirty_minutes
FROM countries
JOIN countries_port_ranges
ON country_id = countries.id;
返回:
1 Afghanistan {"start": 8000, "end": 8029} {"start": 18000, "end": 18029} {"start": 28000, "end": 28029}
2 Albania {"start": 8030, "end": 8059} {"start": 18030, "end": 18059} {"start": 28030, "end": 28059}
3 Algeria {"start": 8060, "end": 8089} {"start": 18060, "end": 18089} {"start": 28060, "end": 28089}
当我通过node-mysql或Sequelize运行此查询时,我得到了这个结果:
[{
"id": 1,
"country_name": "Afghanistan",
"ten_minutes": "{\"start\": 8000, \"end\": 8029}",
"one_minutes": "{\"start\": 18000, \"end\": 18029}",
"thirty_minutes": "{\"start\": 28000, \"end\": 28029}"
},
{
"id": 2,
"country_name": "Albania",
"ten_minutes": "{\"start\": 8030, \"end\": 8059}",
"one_minutes": "{\"start\": 18030, \"end\": 18059}",
"thirty_minutes": "{\"start\": 28030, \"end\": 28059}"
},
{
"id": 3,
"country_name": "Algeria",
"ten_minutes": "{\"start\": 8060, \"end\": 8089}",
"one_minutes": "{\"start\": 18060, \"end\": 18089}",
"thirty_minutes": "{\"start\": 28060, \"end\": 28089}"
}]
app.js:
async (req, res) => {
const q = `SELECT...`
const query = await sequelize.query(q, { type: sequelize.QueryTypes.SELECT })
res.send(query)
}
我的问题是 - 如何获得纯JSON(没有反斜杠)而不是转义字符串?
预期:
{
"id": 3,
"country_name": "Algeria",
"ten_minutes": {"start": 8060, "end": 8089},
"one_minutes": {"start": 18060, "end": 18089},
"thirty_minutes": {"start": 28060, "end": 28089}
}
**避免再次编辑返回数据(通过运行一些map函数..)
感谢。
答案 0 :(得分:0)
按照@ vedran-maricevic提供的链接 -
它发生的原因是因为node-mysql将数据行作为json传递,它包含一个json行和 -
如果你将JSON.stringify()应用于已经是json的东西 然后你将获得一个双重编码的json字符串。
在每个json对象上应用JSON.parse()都不会起作用,并且会抛出错误导致它已经是一个json对象。
如此快速和肮脏的解决方案是仅对双重编码字段应用JSON.parse():
{{1}}
希望它会帮助某人:)