在节点js中创建JSON数组

时间:2013-12-08 23:47:38

标签: javascript arrays json node.js

我需要在我的服务器中用节点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] } );

});

3 个答案:

答案 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));
                        }
    });