Parse Array of JSON objects in NodeJS
Solution 1
In your app.js
:
var bodyParser = require("body-parser");
...
app.use(bodyParser.urlencoded({extended: true}));
Then you can just use req.body
to get the posted values:
app.post('/echo', function (req, res) {
var Array = req.body.data;
res.end(Array[0]["QuestionText"].toString());
});
In front-end, don't do any stringifying:
$.post("/echo", {data: QuestionsArray}, function (data) {
alert(data);
});
Solution 2
I'll try to explain this. First of all, you are crating a json string on the client.
JSON.stringify(QuestionsArray)
Then on the server, you are doing the same again:
JSON.stringify(req.toString()) // this is not needed
Then you parse the double stringifyed json string to a javascript object:
JSON.parse(JSON.stringify(req.toString()))
So now you actually have to parse it twice :). If you just stringify it on the server as you are now, and just call:
var arr = JSON.parse(req.toString());
You will get a javascript object that you can access like this:
res.end(arr[0].QuestionText.toString());
Have a look at this jsFiddle and open your developer tools. Look at the console when it runs and you will see where the problem is: example
Solution 3
You may actually send the JSON directly to server.
$.ajax({
url: "/echo",
type: 'POST',
data: JSON.stringify(QuestionsArray),
processData: false,
contentType: 'application/json'
}).success(function (data) {
alert(data);
});
And in node.js, use bodyParser.json
to get it back.
app.use(bodyParser.json({}));
app.post('/echo', function (req, res) {
var array = req.body;
res.end(array[0]["QuestionText"].toString());
});
By the way, do not use Array
as variable name because Array
represent the Array
class used by JavaScript and your code has overwritten it.
Node.JS
Updated on July 23, 2022Comments
-
Node.JS almost 2 years
I am wondering how can I parse Array of JSON objects in NodeJS?
I want to post JSON array to the server, and be able to use the received array as a regualar JavaScript array.
Thanks in advance.
This is my front-end part that I am converting Array to String using stringify function
document.getElementById("sendJson").addEventListener("click", function () { $.post("/echo", JSON.stringify(QuestionsArray), function (data) { alert(data); }); })
This my back-end part that I am trying to convert Array of JSON object to Array
app.post('/echo', function (req, res) { var Array = JSON.parse(JSON.stringify(req.toString())); res.end(Array[0]["QuestionText"].toString()); });
This is Array that I am trying to sent to the server:
[ { "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" ] } ]