NodeJS

2013-07-23 16 views
36
में HTTP अनुरोध के माध्यम से एक json जाओ

यहाँ एक json प्रतिक्रिया के साथ अपने मॉडल है। मैं एक स्ट्रिंग (डेटा) क्यों प्राप्त करता हूं और एक जेसन नहीं?NodeJS

var options = { 
    hostname: '127.0.0.1' 
    ,port: app.get('port') 
    ,path: '/users' 
    ,method: 'GET' 
    ,headers: { 'Content-Type': 'application/json' } 
}; 

var req = http.request(options, function(res) { 
    res.setEncoding('utf8'); 
    res.on('data', function (data) { 
     console.log(data); // I can't parse it because, it's a string. why? 
    }); 
}); 
reqA.on('error', function(e) { 
    console.log('problem with request: ' + e.message); 
}); 
reqA.end(); 

मैं जेसन कैसे प्राप्त कर सकता हूं?

+0

JSON एक क्रमबद्धता है। यह केवल JSON है यदि यह एक स्ट्रिंग में है, या अन्यथा जावास्क्रिप्ट के रूप में अभी तक विश्लेषण नहीं किया गया है। क्या आप 'JSON.parse()' की तलाश में हैं? –

+0

यह है। धन्यवाद मैट –

+0

मैंने सोचा था कि 'डेटा' ईवेंट को प्रत्येक बार कई बार एक तर्क के साथ कहा जाता है जो स्ट्रिंग डेटा का एक हिस्सा है। क्या यह संभावना नहीं है कि उस घटना में लौटाया गया डेटा डेटा जेएसओएन टूटा जाए क्योंकि यह कुल दस्तावेज़ का केवल एक अंश है? मुझे लगता है कि आपको डेटा बफर करने की आवश्यकता है और फिर अपने 'एंड' ईवेंट में 'JSON.parse() 'का उपयोग करें। – Sukima

उत्तर

52

http डेटा को तारों के रूप में भेजता/प्राप्त करता है ... यह वही तरीका है जो चीजें हैं। आप स्ट्रिंग को जेसन के रूप में पार्स करना चाहते हैं।

var jsonObject = JSON.parse(data); 

How to parse JSON using Node.js?

+2

पर दबाएं ... मेरी माफ़ी, यह मैंने सोचा जितना आसान था .... धन्यवाद क्रिस! –

+0

यह वास्तव में सहायक है, thanx @ChrisCM –

45

बस अनुरोध है कि आप json उपयोग कर रहे हैं बता: सच और हैडर के बारे में भूल जाते हैं और पार्स

var options = { 
    hostname: '127.0.0.1', 
    port: app.get('port'), 
    path: '/users', 
    method: 'GET', 
    json:true 
} 
request(options, function(error, response, body){ 
    if(error) console.log(error); 
    else console.log(body); 
}); 

और बाद

var options = { 
    hostname: '127.0.0.1', 
    port: app.get('port'), 
    path: '/users', 
    method: 'POST', 
    json: {"name":"John", "lastname":"Doe"} 
} 
request(options, function(error, response, body){ 
    if(error) console.log(error); 
    else console.log(body); 
}); 
+0

मुझे पता था कि अनुरोध JSON बॉडी देने में सक्षम था लेकिन दस्तावेज़ वास्तव में उस भाग पर स्पष्ट नहीं था! एक अनावश्यक पार्स कर बचाता है। मुझे लगता है कि आप महसूस कर सकते हैं 'प्रतिक्रिया .toJSON() ' – CJxD

+2

यह' http.request' के लिए काम नहीं करता है, बल्कि [अनुरोध] (https://www.npmjs.com/package/request)। – arve0

2

बस json स्थापित करने के लिए एक ही विकल्प true, शरीर डब्ल्यू बीमार में पार्सड जेसन शामिल है:

request({ 
    url: 'http://...', 
    json: true 
}, function(error, response, body) { 
    console.log(body); 
}); 

 संबंधित मुद्दे