2013-12-08 16 views
8

में एक JSON ऐरे बनाना, मुझे अनुरोध करते समय क्लाइंट को भेजे जाने के लिए एक जेएसओएन स्ट्रिंग नोड जेएस में लिखे गए मेरे सर्वर में बनाने की आवश्यकता है। समस्या यह है कि यह JSON सर्वर में उपलब्ध डेटा पर निर्भर करता है, इस प्रकार, JSON सरणी का आकार हमेशा समान नहीं होता है। मैंने पूरे दिन कोशिश की है, लेकिन हालांकि मैं करीब होना चाहता हूं, फिर भी मुझे यह नहीं मिला।नोड जेएस

एक उदाहरण क्वेरी इस प्रकार है:

json={"players":[ 
      {"name":"Messi", "goals":8},    
      {"name":"Ronaldo", "goals":22}, 
      {"name":"Costa", "goals":20}, 
      {"name":"Neymar", "goals":13}, 
      {"name":"Arabi", "goals":6}, 
      {"name":"Bale", "goals":3}, 
      {"name":"Toquero", "goals":0}]}; 

मैं द्वारा सर्वर पर भेजना होगा:

res.contentType('application/json'); 
res.send(json); 

JSON सारणी कि मैं इसे में हैश 'लक्ष्य' जहां कहा जाता है पर निर्भर करता है बनाना चाहते एक खिलाड़ी का नाम कुंजी और मूल्य के कई लक्ष्य हैं। इस प्रकार, यदि केवल 3 खिलाड़ी हैं, तो JSON Array में केवल यह आकार होना चाहिए।

मैं इस तरह ऑनलाइन JSON सारणी बनाने के लिए कोशिश कर रहा:

result= ""; 
for(i in goals){ 
    result = result+ '{ name:' + i + ", goals:" + goals[i] + '},'; 
} 
result= result.substring(0, result.length - 1); 
res.contentType('application/json'); 
res.send({ 'players': [ result]}); 

हालांकि, ग्राहक केवल आकार 1

Object {jugadores: Array[1]} 

jugadores की एक json प्राप्त करता है: सरणी [1] 0: "{nombre: Messi, goles: 8}, {nombre: रोनाल्डो, goles: 16}, {nombre: कोस्टा, goles: 10}, {nombre: toquero, goles: 0}, {nombre: अरबी, goles: 2}, {nombre: बेल, goles: 10}, {nombre: नेमार, goles: 8} " लंबाई: 1

अग्रिम धन्यवाद, मैं वास्तव में इसके साथ संघर्ष कर रहा हूं :(

संपादित करें: मैं इसे करने के लिए अब कोशिश कर रहा हूं, लेकिन कोई भाग्य नहीं। मुझसे क्या गलती हुई है?

result= "players:["; 
for(i in goals){ 
    result= result+ '{ name:' + i + ", goals:" + goals[i] + '},'; 
} 

result= result.substring(0, resultado.length - 1); 
result= result + ']' 

res.contentType('application/json'); 
myJSONstring = JSON.stringify(resultado); 
res.send(myJSONstring); 

लक्ष्य हैश प्राप्त का उपयोग कर भरा है:

app.get('/player/:id', function (req, res) { 
res.contentType('application/json'); 
res.send({'goals': + goals[req.params.id] }); 

});

+1

उपयोग res.send (JSON.stringify (खिलाड़ियों)) और पाश से छुटकारा पाने और चर परिणाम है। –

+0

कैसे? मेरा मतलब है, अगर मैं लूप से छुटकारा पाता हूं तो मुझे वह जानकारी प्राप्त नहीं होती है जिसे मैं भेजना चाहता हूं। – Rafag

+0

क्या आप अपने कोड का हिस्सा दिखा सकते हैं जहां आप 'लक्ष्यों' –

उत्तर

28

आवश्यक जानकारी के साथ एक जावास्क्रिप्ट डेटा संरचना बनाएं, फिर इसे अंत में जेसन स्ट्रिंग में बदलें।

मैं क्या लगता है कि आप कर रहे हैं, कुछ इस तरह की कोशिश के आधार पर: उन पंक्तियों के साथ

var result = []; 
for (var name in goals) { 
    if (goals.hasOwnProperty(name)) { 
    result.push({name: name, goals: goals[name]}); 
    } 
} 

res.contentType('application/json'); 
res.send(JSON.stringify(result)); 

या कुछ और।

+0

यह काम करता है! आप दोनों को धन्यवाद! – Rafag

7

आपके पास JSON नहीं है। आपके पास एक जावास्क्रिप्ट डेटा संरचना है जिसमें ऑब्जेक्ट्स, एरे, कुछ स्ट्रिंग्स और कुछ नंबर शामिल हैं।

इसे JSON टेक्स्ट (स्ट्रिंग) में बदलने के लिए JSON.stringify(object) का उपयोग करें।

+0

Ive ने जावास्क्रिप्ट डेटा संरचना बनाने और स्ट्रिंग का उपयोग करने का प्रयास किया (कृपया मेरा संपादन जांचें) लेकिन कोई भाग्य नहीं, मुझे क्या याद आ रही है? – Rafag

+1

आप जेएस अक्षरों का प्रतिनिधित्व करने वाले स्ट्रिंग्स को एक साथ ग्लूइंग करके अपनी डेटा संरचना बनाने की कोशिश कर रहे हैं। वास्तविक अक्षर का प्रयोग करें। – Quentin

1

यह भी मुझे मदद की,

res.format({ 
     json:function(){ 
          var responseData = {}; 
          responseData['status'] = 200; 
          responseData['outputPath'] = outputDirectoryPath; 
          responseData['sourcePath'] = url; 
          responseData['message'] = 'Scraping of requested resource initiated.'; 
          responseData['logfile'] = logFileName; 
          res.json(JSON.stringify(responseData)); 
         } 
    });