Javascript 让JSON对象在NodeJS中工作的问题

Javascript 让JSON对象在NodeJS中工作的问题,javascript,json,node.js,google-cloud-functions,google-cloud-pubsub,Javascript,Json,Node.js,Google Cloud Functions,Google Cloud Pubsub,我正在尝试获取一个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

我正在尝试获取一个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格式

有线索吗

谢谢

发生这种情况是因为您使用
.toString()
JSON.stringify
两次“字符串化”了数据

//因为我没有您的数据,所以我将以此为例
变量示例={a:'a',b:'b'};
var payload=JSON.parse(JSON.stringify(example.toString());
//将记录[对象]
控制台日志(有效载荷);
//将记录字符串
控制台日志(有效载荷类型)为什么要这样做

var payload2 = JSON.parse(
  Buffer.from(pubsubMessage.data, 'base64').toString()
);

您可以只打印Buffer.from(pubsubemessage.data,'base64').toString()的结果。

这个问题有点令人困惑。 硬编码的代码下面的2个版本将给我同样的结果和工作良好

payload= { timestamp: "1533564208", device_id: "2nd_test", temperature: "20.0" } 

但是当使用PubSub Gcloud和Buffer函数时,我必须确保传入

payload='{"timestamp":"1533564208","device_id":"2nd_test","temperature":"20.0"}' 
而不是

payload= { timestamp: "1533564208", device_id: "2nd_test", temperature: "20.0" } 

否则,它不会认为它是有效的JSON。< /P> JSON是数据的序列化,而不是数据类型本身。它将数据序列化为字符串。您正在对字符串进行字符串化,在要分析的字符串中留下引号。因此,当解析时,它不是因为JSON对象,因为它们不是键值。它只是变成了一个字符串,您可能只需要解析它而不必对它进行字符串化。我明白您的意思,但我直接做了一个JSON.parse(Buffer.from(pubsubMessage.data,'base64').toString())我在JSON.parse()的位置2处得到了一个语法错误:JSON中的意外标记t@这是因为它不是有效的JSON。原因很简单,之后我需要向BigQuery发送一个JSON,执行此操作时会抛出一个错误,因为我需要一个有效的JSON而不是字符串。如果将字符串转换为JSON,它只会将其包装在两个双引号中。abc=>“abc”,所以试着手动操作。我不确定我是否收到你的评论。我在“{”timestamp:“1533564208”,“device_id:“2nd_test”,“temperature:“20.0”}”上尝试了JSON.parse,但没有成功。除非转义引号,否则无法将该字符串传递给

JSON.parse
。所以它无论如何都不会起作用。字符串应该是
“{\”timestamp\”:“1533564208\”,“设备id\”:“第二次测试”,“温度”:“20.0\”}
“{”timestamp:“1533564208”,“设备id:“第二次测试”,“温度”:“20.0”}
好的,我明白你的意思了。但是,我如何才能将这个字符串{timestamp:“1533564208”、device_id:“2nd_test”、temperature:“20.0”}视为JSON对象?感谢您的回答-它帮助了我!然而,我仍然没有解决我的问题。我添加了一些上下文和编辑来更好地描述这个问题。
payload= { timestamp: "1533564208", device_id: "2nd_test", temperature: "20.0" }