我需要在我的服务器中用节点js创建一个JSON字符串,以便在请求它时发送给客户端。问题是这个JSON依赖于服务器中的可用数据,因此,JSON数组的大小总是不一样。我一整天都在尝试,但是虽然我觉得自己很接近,但我仍然没有得到它。
示例查询如下:
json={"players":[
{"name":"Messi", "goals":8},
{"name":"Ronaldo", "goals":22},
{"name":"Costa", "goals":20},
{"name":"Neymar", "goals":13},
{"name":"Arabi", "goals":6},
{"name":"Bale", "goals":3},
{"name":"Toquero", "goals":0}]};
我会通过以下方式将其发送到服务器:
res.contentType('application/json');
res.send(json);
我想要的JSON数组创建它依赖于一个名为“目标”的哈希,其中一个玩家名称是关键,而一些目标是值。因此,如果只有3个播放器,则JSON阵列只应具有此大小。
我一直试图像这样在线创建JSON数组:
result= "";
for(i in goals){
result = result+ '{ name:' + i + ", goals:" + goals[i] + '},';
}
result= result.substring(0, result.length - 1);
res.contentType('application/json');
res.send( { 'players': [ result]});
但是,客户端只接收大小为1的json
Object {jugadores: Array[1]}
jugadores:数组[1] 0:“{nombre:Messi,goles:8},{nombre:Ronaldo,goles:16},{nombre:Costa,goles:10},{nombre:Toquero,goles:0},{nombre:Arabi,goles: 2},{nombre:Bale,goles:10},{nombre:Neymar,goles:8}“ 长度:1
在此先感谢,我真的很挣扎:(
编辑:我现在正在尝试使用stringy,但没有运气。我做错了什么?
result= "players:[";
for(i in goals){
result= result+ '{ name:' + i + ", goals:" + goals[i] + '},';
}
result= result.substring(0, resultado.length - 1);
result= result + ']'
res.contentType('application/json');
myJSONstring = JSON.stringify(resultado);
res.send(myJSONstring);
使用GET填充目标哈希:
app.get('/player/:id', function (req, res) {
res.contentType('application/json');
res.send( {'goals': + goals[req.params.id] } );
});
答案 0 :(得分:38)
使用所需信息构建JavaScript数据结构,然后将其转换为最后的json字符串。
根据我的想法,尝试这样的事情:
var result = [];
for (var name in goals) {
if (goals.hasOwnProperty(name)) {
result.push({name: name, goals: goals[name]});
}
}
res.contentType('application/json');
res.send(JSON.stringify(result));
或类似的东西。
答案 1 :(得分:7)
你没有JSON。你有一个JavaScript数据结构,包括对象,数组,一些字符串和一些数字。
使用JSON.stringify(object)
将其转换为(一串)JSON文本。
答案 2 :(得分:2)
这个帮助了我,
res.format({
json:function(){
var responseData = {};
responseData['status'] = 200;
responseData['outputPath'] = outputDirectoryPath;
responseData['sourcePath'] = url;
responseData['message'] = 'Scraping of requested resource initiated.';
responseData['logfile'] = logFileName;
res.json(JSON.stringify(responseData));
}
});