【问题标题】:Parse Array of JSON objects in NodeJS在 NodeJS 中解析 JSON 对象数组
【发布时间】:2015-04-26 18:52:51
【问题描述】:

我想知道如何在 NodeJS 中解析 JSON 对象数组?

我想将 JSON 数组发布到服务器,并能够将接收到的数组用作常规 JavaScript 数组。

提前致谢。

这是我使用 stringify 函数将 Array 转换为 String 的前端部分

document.getElementById("sendJson").addEventListener("click", function () {
    $.post("/echo", JSON.stringify(QuestionsArray), function (data) {
        alert(data);
    });
})

这是我尝试将 JSON 对象数组转换为数组的后端部分

app.post('/echo', function (req, res) {
    var Array = JSON.parse(JSON.stringify(req.toString()));
    res.end(Array[0]["QuestionText"].toString());
});

这是我试图发送到服务器的数组:

[  
   {  
      "QuestionText":"What is your Name",
      "QuestionType":1
   },
   {  
      "QuestionText":"Where are you from",
      "QuestionType":2,
      "ChoiceList":[  
         "US",
         "UK"
      ]
   },
   {  
      "QuestionText":"Are you married",
      "QuestionType":3,
      "ChoiceList":[  
         "Yes",
         "No"
      ]
   }
]

Here is the source code

【问题讨论】:

  • 如果你已经在发送一个字符串化的数组(为什么你首先要这样做),你为什么要再次在服务器上对其进行字符串化?
  • 如果在 NodeJS 部分中没有 stringify,我会遇到异常。 s1.postimg.org/v2urhx0kf/Capture.png
  • 您需要使用 bodyparser 中间件,只需发布​​数组而不进行字符串化。
  • @VsevolodGoloviznin 请帮助伙计,我被困了好几天了。
  • req.body 可以工作,并消除解析和字符串化的复杂性

标签: javascript arrays json node.js


【解决方案1】:

在你的app.js

var bodyParser = require("body-parser");
...
app.use(bodyParser.urlencoded({extended: true}));

然后你可以使用req.body 来获取发布的值:

app.post('/echo', function (req, res) {
    var Array = req.body.data;
    res.end(Array[0]["QuestionText"].toString());
});

在前端,不要做任何字符串化:

$.post("/echo", {data: QuestionsArray}, function (data) {
    alert(data);
});

【讨论】:

  • 非常感谢。我怀疑它与bodyParser有关。但不会在一周内找到它
【解决方案2】:

我会试着解释一下。首先,您在客户端上创建一个 json 字符串。

JSON.stringify(QuestionsArray)

然后在服务器上,你又在做同样的事情:

JSON.stringify(req.toString()) // this is not needed

然后你将双字符串化的 json 字符串解析为一个 javascript 对象:

JSON.parse(JSON.stringify(req.toString()))

所以现在你实际上必须解析它两次:)。如果您只是像现在一样在服务器上对其进行字符串化,然后调用:

var arr = JSON.parse(req.toString());

您将获得一个 javascript 对象,您可以像这样访问它:

res.end(arr[0].QuestionText.toString());

看看这个 jsFiddle 并打开你的开发者工具。运行时查看控制台,你会发现问题出在哪里:example

【讨论】:

    【解决方案3】:

    您实际上可以将 JSON 直接发送到服务器。

        $.ajax({
            url: "/echo",
            type: 'POST',
            data: JSON.stringify(QuestionsArray),
            processData: false,
            contentType: 'application/json'
        }).success(function (data) {
            alert(data);
        });
    

    在 node.js 中,使用 bodyParser.json 将其取回。

    app.use(bodyParser.json({}));
    
    app.post('/echo', function (req, res) {
        var array = req.body;
        res.end(array[0]["QuestionText"].toString());
    });
    

    顺便说一句,不要使用Array 作为变量名,因为Array 代表JavaScript 使用的Array 类,而您的代码已经覆盖了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-09
      • 2011-08-04
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多