इसलिए मैं सामान्य रूप से नोडजेएस और जावास्क्रिप्ट सीख रहा हूं, और इसके साथ खेल रहा हूं और मुझे JSON को पार्स करने में कुछ समस्याएं हैं। मैं "उपयोगकर्ता" से निम्नलिखित प्राप्त करें:पार्सिंग JSON सरणी nodejs
{
"sync_contact_list": [
{
"name": "c",
"number": "789",
"email": ""
},
{
"name": "b",
"number": "123",
"email": "[email protected]"
},
{
"name": "a",
"number": "416",
"email": ""
}
]
}
मेरा प्रश्न मैं कैसे ठीक से इस पार्स अलग-अलग बिट्स प्राप्त करने के लिए कर सकते हैं: var करके
{
"name": "a",
"number": "416",
"email": ""
}
मैं यह कर की कोशिश कर रहा है jsonObject = JSON.parse (req.body); , लेकिन मुझे पार्सिंग त्रुटियां मिलती रहती हैं, इससे कोई फर्क नहीं पड़ता कि मैं जेएसओएन को कैसे बदलता हूं (व्यक्तिगत घटक, यह सब, आदि)।
क्या कोई भी बता सकता है कि मैं क्या गलत कर रहा हूं?
संपादित करें: तो मैं विभिन्न पथों से निपटने के लिए एक्सप्रेस का उपयोग करता हूं। तो मेरे पास 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);
और फिर मेरे पास index.js है, जहां मूल रूप से प्रत्येक मार्ग के लिए निम्नलिखित है।
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");
}
अनुरोध एक पंक्ति मुक्त JSON साथ किया जाता है:
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
संपादित करें: मैं मैं शायद आवेदन/json के लिए सामग्री प्रकार बदलना चाहिए एहसास हुआ। इस मामले में, 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)
पार्सिंग त्रुटि क्या कहती है? आपको पूर्ण प्रतिक्रिया का विश्लेषण करना होगा और फिर पहले परिणाम के लिए result.sync_contact_list [0] तक पहुंच प्राप्त करनी होगी। – Daff
इसे एक लाइनब्रेक-/spacefree json के साथ आज़माएं। क्या वह काम करता है? –
@AronWoost सही हो सकता है। क्या आपके द्वारा प्रदान किए गए प्रारूप में उपयोगकर्ता ** डेटा ** से डेटा है? या आपने इसे स्टैक ओवरफ्लो के लिए प्रारूपित किया है? मुझे लगता है कि आप हमें केवल उस डेटा की संरचना दिखा रहे हैं, जिसे आप प्राप्त करना चाहते हैं, लेकिन हमें इसके प्रकार के साथ सटीक 'req.body' मान दिया जाना चाहिए ('typeof req.body' का आह्वान करने का प्रयास करें और हमें परिणाम दें)। – Tadeck