我通过他们的 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");`
那似乎也不起作用。我会再看一遍。