返回带有反斜杠的node-mysql JSON类型

时间:2018-04-17 11:25:53

标签: mysql sql json node.js sequelize.js

我正在尝试通过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函数..)

感谢。

1 个答案:

答案 0 :(得分:0)

按照@ vedran-maricevic提供的链接 -

它发生的原因是因为node-mysql将数据行作为json传递,它包含一个json行和 -

  

如果你将JSON.stringify()应用于已经是json的东西   然后你将获得一个双重编码的json字符串。

在每个json对象上应用JSON.parse()都不会起作用,并且会抛出错误导致它已经是一个json对象。

如此快速和肮脏的解决方案是仅对双重编码字段应用JSON.parse():

{{1}}

希望它会帮助某人:)