, así que estoy aprendiendo NodeJS y javascript en general, y estoy jugando con él y tengo algunos problemas para analizar un JSON. Recibo el siguiente desde el "usuario":Análisis JSON array nodejs
{
"sync_contact_list": [
{
"name": "c",
"number": "789",
"email": ""
},
{
"name": "b",
"number": "123",
"email": "[email protected]"
},
{
"name": "a",
"number": "416",
"email": ""
}
]
}
Mi pregunta es ¿cómo puedo analizar correctamente esto para conseguir los bits individuales:
{
"name": "a",
"number": "416",
"email": ""
}
que he estado tratando de hacerlo haciendo var jsonObject = JSON.parse (req.body); , pero sigo recibiendo errores de análisis, no importa cómo varíe el JSON que recibo (componentes individuales, todo, etc.).
¿Alguien podría señalar lo que estoy haciendo mal?
EDITAR: Así que uso express para tratar con las diferentes rutas. Así que tengo 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);
Y luego tengo index.js, donde básicamente tengo lo siguiente para cada ruta.
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 solicitud se realiza con una línea de JSON libre:
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: me di cuenta de que probablemente debería cambiar el tipo de contenido application/json. en este caso, por JSON.stringify consigo el siguiente:
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)
¿Qué dice el error de análisis? Debe analizar la respuesta completa y luego acceder a result.sync_contact_list [0] para obtener el primer resultado. – Daff
Pruébalo con un json linebreak// spacefree. ¿Eso funciona? –
@AronWoost puede estar en lo cierto. ¿Los datos del usuario ** son exactamente ** en el formato que proporcionó? ¿O acabas de formatearlo para StackOverflow? Supuse que nos está mostrando solo la estructura de los datos que desea recibir, pero se nos debe dar el valor exacto de "req.body" junto con su tipo (intente invocar 'typeof req.body' y dénos el resultado). – Tadeck