quindi sto imparando NodeJS e javascript in generale, e sto giocando con esso e ho qualche problema nell'analisi di un JSON. Ricevo il seguente dal "utente":Parsing JSON array nodejs
{
"sync_contact_list": [
{
"name": "c",
"number": "789",
"email": ""
},
{
"name": "b",
"number": "123",
"email": "[email protected]"
},
{
"name": "a",
"number": "416",
"email": ""
}
]
}
La mia domanda è come posso analizzare correttamente questo per ottenere i singoli bit:
{
"name": "a",
"number": "416",
"email": ""
}
Ho cercato di farlo facendo var jsonObject = JSON.parse (req.body); , ma continuo ad avere errori di analisi, indipendentemente da come modifico il JSON che ricevo (singoli componenti, tutto il resto, ecc.).
Qualcuno potrebbe far notare cosa sto facendo male?
MODIFICA: Quindi uso express per gestire i diversi percorsi. Quindi ho 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);
E poi ho index.js, dove fondamentalmente ho il seguente per ogni percorso.
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");
}
La richiesta è realizzato con un JSON gratuito di linea:
curl -i -d "{'sync_contact_list':[{'name':'c','number':'789','email':''},{'name':'b','number':'123','email':'[email protected]'},{'name':'a','number':'416','email':''}]}" http://localhost:3000/syncService
EDIT: mi sono reso conto probabilmente dovrei cambiare il tipo di contenuto application/json. in questo caso, per JSON.stringify ottengo il seguente:
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)
Cosa dice l'errore di parsing? È necessario analizzare la risposta completa e quindi accedere a result.sync_contact_list [0] per il primo risultato. – Daff
Provalo con un josh senza interruzioni di riga/spazio. Funziona? –
@AronWoost potrebbe avere ragione. I dati dell'utente ** sono esattamente ** nel formato che hai fornito? O hai appena formattato per StackOverflow? Presumo che tu ci stia mostrando solo la struttura dei dati che vuoi ricevere, ma dovremmo avere il valore esatto di 'req.body' insieme al suo tipo (prova a richiamare' typeof req.body' e forniscici il risultato). – Tadeck