gpt4 book ai didi

javascript - MySQL 查询返回一个字符串作为 JSON_OBJECT() 的结果

转载 作者:搜寻专家 更新时间:2023-11-01 00:38:18 26 4
gpt4 key购买 nike

我编写了一个查询,从表中获取帖子并返回有关每个帖子作者的信息:

SELECT post.id, post.text, post.datetime, JSON_OBJECT(
'username', user.username,
'firstName', user.firstName,
'firstName', user.lastName) as author
FROM post
INNER JOIN user ON post.authorId = user.id;

但作为响应,author 字段是一个字符串:

author: "{"username": "@", "firstName": null}"
datetime: "2017-05-02T20:23:23.000Z"
id: 10
text: "5555"

我尝试使用 CAST 解决这个问题,但无论如何 author 是一个字符串:

CAST(JSON_OBJECT(
'username', user.username,
'firstName', user.firstName,
'firstName', user.lastName) as JSON) as author

为什么会发生这种情况以及如何解决?

更新:

我使用 Node.js 和 Express 从服务器发送数据:

app.get('/posts', (req, res, next) => {
getPosts().then((posts) => {
res.setHeader('Content-Type', 'application/json');
res.send(posts);
})
.catch(next);
});

// ...

getPosts() {
return new Promise((resolve, reject) => {
const query = `
SELECT post.id, post.text, post.datetime, JSON_OBJECT(
'username', user.username,
'firstName', user.firstName,
'firstName', user.lastName) as author
FROM post
INNER JOIN user ON post.authorId = user.id;`;
this.connection.query(query, (err, result) => {
if(err) {
return reject(new Error("An error occured getting the posts: " + err));
}

console.log(result) // prints author as a string

resolve(result || []);
});
});
}

console.log 的结果:

{
id: 1,
text: 'hello, world!',
datetime: 2017-05-02T15:08:34.000Z,
author: '{"username": "@", "firstName": null}'
}

我也在这里尝试将 res.send(posts) 更改为 res.json(posts) 但它没有帮助。

我的来自客户端的功能,它接触服务器以获取帖子:

export const getPosts = () => {
customFetch(apiUrl + '/posts')
.then(response => response.json())
.then(json => json)
};

最佳答案

我认为 MySQL 可以返回一个字符串,因为 JSON_OBJECT() 函数已经通过生成表示格式良好的 JSON 的字符串来完成它的工作。

您可以使用 javascript 将该字符串转换为 JSON 对象

var obj = JSON.parse(yourString);

编辑(关于 JSON 和 Javascript 对象)

首先,如果您不知道,JSON 代表 JavaScript 对象表示法:这意味着它是一种表示 JavaScript 对象的文本方式。

从 MySQL 的 Angular 来看,您已经在 SELECT 语句中解决了这个问题,因为查询返回的是有效的 JSON。

事实是数据随后被传输到 Javascript( Node ),但是对象的 Javascript 内部表示与其文本表示(JSON)不同;这意味着您必须“转换”它,以便将字符串转换为对象。

为了避免这种转换,您需要的机制需要 MySQL 知道 Javascript 如何表示一个对象,然后使用这些知识返回您的对象的字节码。这称为序列化,恐怕它超出了像 MySQL 这样的 dbms 的目的。

希望这能澄清你的疑虑......

关于javascript - MySQL 查询返回一个字符串作为 JSON_OBJECT() 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43757739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com