gpt4 book ai didi

javascript - 将 JSON 数据从 Node.js 存储到 MongoDB

转载 作者:数据小太阳 更新时间:2023-10-29 04:08:10 25 4
gpt4 key购买 nike

我正在通过他们的 API 从 Wundground 毫无问题地提取 JSON 格式的天气数据。我试图将该数据存储在 MongoDB 中以备后用。我实际上得到了数据,并且能够将其写入 Mongo 中的集合。但是,当我执行 db.collection.find() 时,几乎看起来每个字符都是单独保存的,而不是 JSON 格式。这是获取数据并应保存到 Mongo 的代码片段:

// Define the Wunderground method.
var method = "/api/" + apiKey + "/conditions/q/" + state + "/" + city + ".json";

// Define the HTTP post properties.
var options = {
host: 'api.wunderground.com',
path: method,
method: 'GET',
port: 80
};

// Create the HTTP POST.
var request = http.request(options, function (response) {
var str = '';

// Create the listener for data being returned.
response.on('data', function (chunk) {
str += chunk;


// Create the listener for the end of the POST.
response.on('end', function (){
db.collection('weathercollection').save(str, function(err, records) {
if (err) throw err;
console.log("record added");
});
});

JSON 格式天气数据的一小段摘录:

{ "current_observation": {
"image": {
"url": "http://icons-ak.com/graphics/logo.png",
"title": "Weather Underground"
},
"display_location": {
"full":"My City, State",
"city":"My City",

我不应该在保存到 Mongo 之前解析数据吗?那我错过了什么。正如我所说,如果我将所有天气数据完美地输出到控制台,我似乎只是在 Node.JS 和 MongoDB 之间做错了什么。

谢谢。

更新***

我确实尝试用这种方式解析“str”

// Create the listener for data being returned.
response.on('data', function (chunk) {
str += chunk;

var jsonResult = JSON.parse(str);

// Create the listener for the end of the POST.
response.on('end', function (){
db.collection('weathercollection').save(jsonResult, function(err, records) {
if (err) throw err;
console.log("record added");`

这似乎也没有用。我再看看。

最佳答案

是的,你需要给你的 send运行一个 JavaScript 对象(参见 MongoDB native driver documentation ,看起来您正在使用它),但是您向它发送一个字符串(这就是为什么您可以在每个 data 事件上连接它)。您必须使用 JSON.parse(str) 将字符串转换为完整对象.

如果您想确定正在处理的是哪种数据类型,请打印 typeof str 的结果和 typeof JSON.parse(str) .

编辑:您的代码中有第二个问题。 response对象实际上是一个 stream ,这意味着它在接收到数据时发出数据。这也意味着您可以收到 data事件多次。这就是为什么您需要:

  1. 创建一个空字符串
  2. 每个data事件,将您刚刚收到的 block 连接到字符串
  3. 只有在确定不会再收到任何数据时才尝试解析它。

在您提供的更新代码片段中,您尝试在第一个数据事件上解析字符串,但这可能是一个不完整的字符串。

正确的做法是:

var str = '';
response.on('data', function(chunk) {
str += chunk;
});
response.on('end', function() {
var myObject = JSON.parse(str);
// Send the Mongo query here
});

与此问题相关,您还向 end 注册了一个监听器事件,这很好,但是您在每个 data 上添加了一个新的监听器事件!这意味着如果您收到 5 个数据事件,您将调用 5 次将对象添加到 MongoDB 的函数……在上面的代码片段中,请注意我已经移动了 response.on('end', function() {…})。在response.on('data')的外面回调。

关于javascript - 将 JSON 数据从 Node.js 存储到 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19846462/

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