从node.js返回JSON编码string

我在node.js中是一个完整的noob,并试图通过使用learnyounode来学习它。 我被困在learnyounode的最后一个问题 – [HTTP JSON API服务器]。
在这里,教程将调用一个url来提供一个时间(如iso标准),并且node.js服务器应该返回(k,v)中的json回复,其中k = {“hour”,“minute”,second “}。

我的解决scheme如下所示 –

var http = require('http'); var url = require('url'); function get_json(str) { var result = []; str = str.substr(str.lastIndexOf('T') + 1); result['hour'] = Number(str.substring(0, str.indexOf(':'))); str = str.substring(str.indexOf(':') + 1); result['minute'] = Number(str.substring(0, str.indexOf(':'))); str = str.substring(str.indexOf(':') + 1); result['second'] = Number(str.substring(0, str.indexOf('.'))); return result; } function get_unix(str) { var result = get_json(str); result['unix'] = ((result['hour'] * 3600000) + (result['min'] * 60000) + (result['sec'] * 1000)); return result; } var server = http.createServer(function (req, res) { if (req.method != 'GET') { return res.write('{ "error": "query-failed" }'); } var cur_url = url.parse(req.url, true); if (cur_url['pathname'] == '/api/parsetime') { res.writeHead(200, { 'Content-Type': 'application/json' }); res.write(JSON.stringify(get_json(cur_url['query']['iso']))); } else if (cur_url['pathname'] == '/api/unixtime') { res.writeHead(200, { 'Content-Type': 'application/json' }); res.write(JSON.stringify(get_unix(cur_url['query']['iso']))); } console.log(get_json(cur_url['query']['iso'])); console.log(JSON.stringify(get_json(cur_url['query']['iso']))); res.end(); }); server.listen(process.argv[2]); 

但是解决scheme不能正常工作,因为JSON.stringify()返回空[]string。 我在这里错过了什么?

当前解决scheme的输出:

 [ hour: 7, minute: 27, second: 38 ] [] [] [] [ hour: 7, minute: 27, second: 38 ] [] 

 function get_json(str) { var result = [] ; str = str.substr(str.lastIndexOf('T') + 1); result['hour'] = Number(str.substring(0, str.indexOf(':'))); str = str.substring(str.indexOf(':') + 1); result['minute'] = Number(str.substring(0, str.indexOf(':'))); str = str.substring(str.indexOf(':') + 1); result['second'] = Number(str.substring(0, str.indexOf('.'))); return result; } 

你正在初始化result作为一个数组,但把它当作一个对象。 JavaScript接受这种sorting,但JSON不 – 一个数组是一个数组,一个对象是一个对象。

如果你初始化它作为一个对象( var result = {}; ),JSON将识别它的属性并打印它们。 实际上,JSON只能看到一个空的数组。

我改变了一些地方。

 function get_json(str) { str = new Date(str).toLocaleTimeString(); var arr = str.split(":"); var result = {}; result['hour'] = +arr[0]; result['minute'] = +arr[1]; result['second'] = +arr[2]; return result; } function get_unix(str) { return {"unixtime": +(new Date(str))}; } 

+string转换为int