在节点 js 中创建 JSON 数组

Posted

技术标签:

【中文标题】在节点 js 中创建 JSON 数组【英文标题】:Creating a JSON Array in node js 【发布时间】:2013-12-25 23:32:10 【问题描述】:

我需要在我的服务器中创建一个用节点 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 数组依赖于一个名为“goals”的散列,其中玩家姓名是键,目标数是值。因此,如果只有 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:C罗, goles:16, nombre:Costa, goles:10, nombre:Toquero, goles:0, nombre:Arabi, goles: 2, 名词:贝尔, goles:10, 名词:内马尔, 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]  );

);

【问题讨论】:

使用 res.send(JSON.stringify(players)) 并摆脱循环和结果变量。 怎么样?我的意思是,如果我摆脱循环,我就不会获得我想要发送的信息。 您能否显示设置goals值的代码部分 Convert JS object to JSON string的可能重复 您应该将对象或数组传递给JSON.stringify,而不是字符串。 【参考方案1】:

用所需的信息构建一个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));

或类似的东西。

【讨论】:

【参考方案2】:

您没有 JSON。你有一个由对象、数组、一些字符串和一些数字组成的 JavaScript 数据结构。

使用JSON.stringify(object) 将其转换为(一串)JSON 文本。

【讨论】:

我尝试创建 JavaScript 数据结构并使用 stringify(请检查我的编辑)但没有运气,我错过了什么? 您正试图通过将表示 JS 文字的字符串粘合在一起来构建您的数据结构。使用实际的文字。【参考方案3】:

这个对我有帮助,

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));
                        
    );

【讨论】:

以上是关于在节点 js 中创建 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在节点 js 中创建类似 php 的函数

通过 JS 自执行函数在 Head 中创建文本节点时遇到问题

如何使用 json 解析器的 boost property_tree 创建空数组节点

如何在 d3.js 中创建家谱?

在 C 中创建一个 void toBST 函数,它接受 2 个参数:Tree* root 和一个数组,并将所有树节点添加到一个数组中 - 顺序无关紧要

js中创建html标签加入select下默认的option的value和text删除select元素节点下全部的OPTION节点