【发布时间】:2019-01-27 22:14:38
【问题描述】:
我正在尝试获取一个 JSON 对象,因此为了确保我拥有它,我编写了如下代码:
var payload = JSON.parse(
JSON.stringify(Buffer.from(pubsubMessage.data, 'base64').toString())
);
console.log(payload);
// { timestamp: '1533564208', device_id: '2nd_test', temperature: '20.0' }
console.log(typeof payload);
// string
编辑 - 根据您的反馈,我将进一步详细说明代码和类型。以下是完整代码及其返回的内容:
var payload = Buffer.from(pubsubMessage.data, 'base64').toString();
console.log('payload 0');
console.log(payload);
// { timestamp: "1533564208", device_id: "2nd_test", temperature: "20.0" }
console.log(typeof payload);
//string
var payload2 = JSON.parse(
Buffer.from(pubsubMessage.data, 'base64').toString()
);
console.log('payload 2');
console.log(payload2);
// SyntaxError: Unexpected token t in JSON at position 2 at JSON.parse
编辑 2 - 为了更好地理解上下文,我将 GCloud 中的函数与 PubSub 触发器一起使用。所以缓冲区中的数据来自pubsub。
我不明白为什么函数 JSON.parse 会崩溃,尽管它显然是字符串中的 JSON 格式。
这有什么线索吗?
谢谢!
【问题讨论】:
-
JSON 是数据的序列化,而不是数据类型本身。它将数据序列化为字符串。
-
你正在对一个字符串进行字符串化,在你正在解析的字符串中留下引号。因此,当解析 this 时,它不是因为 JSON 对象,因为它们不是键值。它只是变成一个字符串
-
你可能只需要解析它而不用字符串化它。
-
我明白你说的,但我直接做 JSON.parse(Buffer.from(pubsubMessage.data, 'base64').toString()) 我得到一个 SyntaxError: Unexpected token t in JSON at JSON.parse (
) 的第 2 位 -
@fro 那是因为它不是有效的 JSON。
标签: javascript json node.js google-cloud-functions google-cloud-pubsub