javascript - Parse JSON-array nodejs
så jeg lærer NodeJS og JavaScript generelt, og leker med det, og jeg har noen problemer med å analysere en JSON. Jeg mottar følgende fra "brukeren":
{
"sync_contact_list": [
{
"name": "c",
"number": "789",
"email": ""
},
{
"name": "b",
"number": "123",
"email": "[email "
},
{
"name": "a",
"number": "416",
"email": ""
}
]
}
Mitt spørsmål er hvordan jeg kan analysere dette på en korrekt måte for å få de enkelte bitene:
{
"name": "a",
"number": "416",
"email": ""
}
Jeg har prøvd å gjøre det ved å skrive var jsonObject=JSON.parse(req.body); , men jeg får stadig parse-feil, uansett hvordan jeg varierer JSON-en jeg mottar (enkeltkomponenter, alt sammen, osv).
Kan noen peke på hva jeg gjør galt?
REDIGER: Så jeg bruker Express for å håndtere de forskjellige stiene. Så jeg har app.js:
var express = require('express')
, routes = require('./routes')
//var mysql = require('mysql');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
//app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
//app.post('/', routes.syncServiceIndex);
app.post('/syncService', routes.synchServicePost);
app.get('/syncService/:syncServiceUser/sync', routes.synchServiceSync);
app.post('/syncService/:syncServiceUser/push', routes.synchServicePush);
app.del('/syncService/:syncServiceUser', routes.synchServiceDel);
app.post('/syncService/:syncServiceUser/contacts/push', routes.synchServiceContactsPush);
app.get('/syncService/:syncServiceUser/contacts/sync', routes.synchServiceContactsSync);
app.post('/syncService/:syncServiceUser/contacts/', routes.synchServiceContactsPost);
app.get('/syncService/:syncServiceUser/contacts/:contactId', routes.synchServiceContactsGet);
app.put('/syncService/:syncServiceUser/contacts/:contactId', routes.synchServiceContactsPut);
app.del('/syncService/:syncServiceUser/contacts/:contactId', routes.synchServiceContactsDel);
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
Og så har jeg index.js, hvor jeg i prinsippet har følgende for hver rute.
exports.synchServicePost = function(req, res) {
console.log('synchServicePost');
console.log("BODY:"+JSON.stringify(req.body));
var jsonObject = JSON.parse(req.body);
res.statusCode = 200;
res.send("OK\n");
}
Forespørselen gjøres med en linjefri JSON:
curl -i -d "{'sync_contact_list':[{'name':'c','number':'789','email':''},{'name':'b','number':'123','email':'[email '},{'name':'a','number':'416','email':''}]}" http://localhost:3000/syncService
REDIGER: Jeg innså at jeg sannsynligvis bør endre innholdstypen til application/json. I dette tilfellet får jeg følgende for JSON.stringify:
SyntaxError: Unexpected token ILLEGAL
at parse (native)
at IncomingMessage.<anonymous> (/home/alex/peekcode/quipmail/synch/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:71:15)
at IncomingMessage.emit (events.js:61:17)
at HTTPParser.onMessageComplete (http.js:133:23)
at Socket.ondata (http.js:1029:22)
at Socket._onReadable (net.js:677:27)
at IOWatcher.onReadable [as callback] (net.js:177:10)
Svar #1
Kanskje det allerede er analysert? Jeg vet ikke (jeg har ikke sett hele koden din).
Hvis det er (eller du vil analysere det slik du trenger), vil spesifikke "biter" være tilgjengelige på den måten (se denne jsfiddle for bevis):
for (var i=0; i<jsonObject['sync_contact_list'].length; i++){
// here jsonObject['sync_contact_list'][i] is your current "bit"
}
Innenfor løkken, mellom iterasjonene, endres jsonObject['sync_contact_list'][i] mellom «bitene», fordi i endres og peker på det første elementet, deretter på det andre, og så videre, til det siste elementet.
Svar #2
Så det viser seg at JSON-en min var dårlig formatert. Dårlig vane jeg fikk fra å jobbe med et Java-prosjekt. Når den delen var fikset, ble forespørselen min analysert som standard, noe som forårsaket noen andre hodepiner til jeg fant ut om node-inspector.
Som et resultat velger jeg Tadeck som den som har det riktige svaret.
